X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=restore%2Ftape.c;h=395c99e9a81fb7a806a2acdca977653277c0146a;hp=5ee9973f5fdf4bb996652060f28f3dd089af6854;hb=f0ab1ab5331f9ed387ade32d96b24285b0cd5282;hpb=ec5c1bc937c43be6649a203619bae2d3d9b0d3c2 diff --git a/restore/tape.c b/restore/tape.c index 5ee9973..395c99e 100644 --- a/restore/tape.c +++ b/restore/tape.c @@ -42,7 +42,7 @@ #ifndef lint static const char rcsid[] = - "$Id: tape.c,v 1.97 2010/06/11 09:51:59 stelian Exp $"; + "$Id: tape.c,v 1.98 2010/06/11 09:57:31 stelian Exp $"; #endif /* not lint */ #include @@ -61,6 +61,8 @@ static const char rcsid[] = #include #include #include +#include +#include #ifdef __linux__ #include @@ -847,19 +849,28 @@ extractfile(struct entry *ep, int doremove) uid_t luid = curfile.dip->di_uid; gid_t lgid = curfile.dip->di_gid; - Vprintf(stdout, "extract socket as dummy file %s\n", name); + Vprintf(stdout, "extract socket %s\n", name); skipfile(); if (Nflag) return (GOOD); if (! (spcl.c_flags & DR_METAONLY)) { - int fd; + int sk; + struct sockaddr_un addr; + if (uflag) (void)unlink(name); - if ((fd = open(name, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0) { - warn("%s: cannot create dummy file", name); + + if ((sk = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) { + warn("%s: cannot create socket", name); + return (FAIL); + } + addr.sun_family = AF_UNIX; + strcpy(addr.sun_path, name); + if (bind(sk, (const struct sockaddr *)&addr, sizeof(struct sockaddr_un)) < 0) { + warn("%s: cannot create socket", name); return (FAIL); } - close(fd); + close(sk); } (void) chown(name, luid, lgid); (void) chmod(name, mode);