X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=zpm-syncfs.c;h=85c033e2789bc54d7bc0d5c9f0273378a6fcfff7;hb=776bb423639a19071a36484e9cbf5cc771afaba7;hp=06477f172563c84b4b9ec0f24d357481178e352f;hpb=5757c77483cec69bb2122142a923040a87270416;p=zpackage diff --git a/zpm-syncfs.c b/zpm-syncfs.c index 06477f1..85c033e 100644 --- a/zpm-syncfs.c +++ b/zpm-syncfs.c @@ -607,9 +607,11 @@ static int set_md(struct config *conf, struct nitem *item) { int success = 0; if (conf->dryrun) { - printf("chmod %o %s\n", item->mode, item->dest); + if (item->ftype != 'l') { + printf("chmod %o %s\n", item->mode, item->dest); + } if (conf->setuser && conf->setgroup) { - printf("chown %d:%d %s\n", item->uid, item->gid, + printf("lchown %d:%d %s\n", item->uid, item->gid, item->dest); } printf("mtime %.0f %s\n", (double)item->mtime, item->dest); @@ -617,17 +619,20 @@ static int set_md(struct config *conf, struct nitem *item) { return success; } - rv = chmod(item->dest, item->mode); + /* can't chmod a symlink */ + if (item->ftype != 'l') { + rv = chmod(item->dest, item->mode); - if (rv == -1) { - setsyserr(conf, "can't chmod %o %s", item->mode, item->dest); - return conf->errabort; + if (rv == -1) { + setsyserr(conf, "can't chmod %o %s", item->mode, item->dest); + return conf->errabort; + } } if (conf->setuser && conf->setgroup) { - rv = chown(item->dest, item->uid, item->gid); + rv = lchown(item->dest, item->uid, item->gid); if (rv == -1) { - setsyserr(conf, "can't chown %s", item->dest); + setsyserr(conf, "can't lchown %s", item->dest); return conf->errabort; } }