OSDN Git Service

* src/lhext.c (adjust_info): change owner/group according to
authorarai <arai@6a8cc165-1e22-0410-a132-eb4e3f353aba>
Tue, 28 May 2002 18:47:21 +0000 (18:47 +0000)
committerarai <arai@6a8cc165-1e22-0410-a132-eb4e3f353aba>
Tue, 28 May 2002 18:47:21 +0000 (18:47 +0000)
user/group name when extracting.

git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/lha/lha/trunk@154 6a8cc165-1e22-0410-a132-eb4e3f353aba

src/lhext.c

index cf0f90d..e63c000 100644 (file)
@@ -172,12 +172,27 @@ adjust_info(name, hdr)
                        chmod(name, hdr->unix_mode);
 #endif
                if (!getuid()){
+            uid_t uid = hdr->unix_uid;
+            gid_t gid = hdr->unix_gid;
+
+#if HAVE_GETPWNAM && HAVE_GETGRNAM
+            if (hdr->user[0]) {
+                struct passwd *ent = getpwnam(hdr->user);
+                if (ent) uid = ent->pw_uid;
+            }
+            if (hdr->group[0]) {
+                struct group *ent = getgrnam(hdr->group);
+                if (ent) gid = ent->gr_gid;
+            }
+#endif
+
 #if HAVE_LCHOWN
                        if ((hdr->unix_mode & UNIX_FILE_TYPEMASK) == UNIX_FILE_SYMLINK)
-                               lchown(name, hdr->unix_uid, hdr->unix_gid);
-                       else
+                               lchown(name, uid, gid);
+                       else {
 #endif /* HAVE_LCHWON */
-                               chown(name, hdr->unix_uid, hdr->unix_gid);
+                               chown(name, uid, gid);
+            }
                }
                errno = 0;
        }