diff options
Diffstat (limited to 'usr/src/lib/libpkg')
-rw-r--r-- | usr/src/lib/libpkg/common/isdir.c | 84 | ||||
-rw-r--r-- | usr/src/lib/libpkg/common/mapfile-vers | 1 | ||||
-rw-r--r-- | usr/src/lib/libpkg/common/pkglib.h | 4 | ||||
-rw-r--r-- | usr/src/lib/libpkg/common/verify.c | 72 |
4 files changed, 59 insertions, 102 deletions
diff --git a/usr/src/lib/libpkg/common/isdir.c b/usr/src/lib/libpkg/common/isdir.c index 9ae2751fc6..55b59d5e67 100644 --- a/usr/src/lib/libpkg/common/isdir.c +++ b/usr/src/lib/libpkg/common/isdir.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -40,7 +40,6 @@ #include <string.h> #include "pkglocale.h" #include "pkglibmsgs.h" -#include "pkglib.h" /* * Defines for cpio/compression checks. @@ -78,7 +77,6 @@ int isFstypeRemote(char *a_fstype); int isdir(char *path); int isfile(char *dir, char *file); int iscpio(char *path, int *iscomp); -int eval_ftype(char *path, char ftype, char *myftype); /* * Name: isdir @@ -391,83 +389,3 @@ _InitRemoteFstypes(void) (void) fclose(fp); } - -/* - * Name: eval_ftype - * Description: Evaluate the target's file type - * Arguments: path - Path on filesystem - * ftype - Type to be changed to - * myftype - Address into which current - * type of target will be stored - * Returns: int - * 0 - Success - * VE_EXIST - Path does not exist - * VE_FTYPE - Path file type is not recognized, - * is not supported, - * or is not what is expected - */ -int -eval_ftype(char *path, char ftype, char *myftype) -{ - struct stat status; - int retcode = 0; - int statError = 0; - - /* If we are to process symlinks the old way then we follow the link */ - if (nonABI_symlinks()) { - if ((ftype == 's') ? lstat(path, &status) : - stat(path, &status)) { - (void) reperr(pkg_gt(ERR_EXIST)); - retcode = VE_EXIST; - *myftype = '?'; - statError++; - } - /* If not then we inspect the target of the link */ - } else { - if (lstat(path, &status) == -1) { - reperr(pkg_gt(ERR_EXIST)); - retcode = VE_EXIST; - *myftype = '?'; - statError++; - } - } - if (!statError) { - /* determining actual type of existing object */ - switch (status.st_mode & S_IFMT) { - case S_IFLNK: - *myftype = 's'; - break; - - case S_IFIFO: - *myftype = 'p'; - break; - - case S_IFCHR: - *myftype = 'c'; - break; - - case S_IFDIR: - *myftype = 'd'; - break; - - case S_IFBLK: - *myftype = 'b'; - break; - - case S_IFREG: - case 0: - *myftype = 'f'; - break; - - case S_IFDOOR: - *myftype = 'D'; - break; - - default: - *myftype = '?'; - return (VE_FTYPE); - } - retcode = 0; - } - return (retcode); -} diff --git a/usr/src/lib/libpkg/common/mapfile-vers b/usr/src/lib/libpkg/common/mapfile-vers index 81934e31ae..f1fd2a8001 100644 --- a/usr/src/lib/libpkg/common/mapfile-vers +++ b/usr/src/lib/libpkg/common/mapfile-vers @@ -89,7 +89,6 @@ SUNWprivate { epclose; epopen; esystem; - eval_ftype; find_ca_certs; find_cl_certs; find_key_cert_pair; diff --git a/usr/src/lib/libpkg/common/pkglib.h b/usr/src/lib/libpkg/common/pkglib.h index feb80d1d0f..04b17730ca 100644 --- a/usr/src/lib/libpkg/common/pkglib.h +++ b/usr/src/lib/libpkg/common/pkglib.h @@ -499,12 +499,10 @@ extern void ds_order(char *list[]); extern void ds_putinfo(char *buf); extern void ds_skiptoend(char *device); extern void ecleanup(void); -extern int eval_ftype(char *path, char ftype, char *myftype); /*PRINTFLIKE1*/ extern void logerr(char *fmt, ...); extern int mappath(int flag, char *path); extern int mapvar(int flag, char *varname); -extern void reperr(char *fmt, ...); /*PRINTFLIKE1*/ extern void progerr(char *fmt, ...); extern void pkgerr(PKG_ERR *); @@ -628,7 +626,6 @@ extern int isFstypeRemote(); extern int isPathRemote(); extern int iscpio(); extern int isdir(); -extern int eval_ftype(); extern int isfile(); extern int pkgexecl(); extern int pkgexecv(); @@ -656,7 +653,6 @@ extern void ds_putinfo(); extern void ds_skiptoend(); extern void ecleanup(); extern void logerr(); -extern void reperr(); extern int mappath(); extern int mapvar(); extern void progerr(); diff --git a/usr/src/lib/libpkg/common/verify.c b/usr/src/lib/libpkg/common/verify.c index 1af2d2778c..c48c5b8c77 100644 --- a/usr/src/lib/libpkg/common/verify.c +++ b/usr/src/lib/libpkg/common/verify.c @@ -85,7 +85,7 @@ typedef union hilo { } CHECKSUM_T; /*PRINTFLIKE1*/ -void +static void reperr(char *fmt, ...) { char *pt; @@ -392,6 +392,7 @@ averify(int fix, char *ftype, char *path, struct ainfo *ainfo) int uid, gid; int dochown; int retcode; + int statError = 0; int targ_is_dir = 0; /* replacing a directory */ char myftype; char buf[PATH_MAX]; @@ -490,19 +491,62 @@ averify(int fix, char *ftype, char *path, struct ainfo *ainfo) retcode = 0; - /* Evaluate the file type of existing object */ - retcode = eval_ftype(path, *ftype, &myftype); - - /* - * If path file type is not recognized, is not supported or - * is not what is expected, return - */ - if (retcode == VE_FTYPE) - return (retcode); - - /* If existing type is Directory, then set flag */ - if (myftype == 'd') - targ_is_dir = 1; + /* If we are to process symlinks the old way then we follow the link */ + if (nonABI_symlinks()) { + if ((*ftype == 's') ? lstat(path, &status) : + stat(path, &status)) { + reperr(pkg_gt(ERR_EXIST)); + retcode = VE_EXIST; + myftype = '?'; + statError++; + } + /* If not then we inspect the target of the link */ + } else { + if ((n = lstat(path, &status)) == -1) { + reperr(pkg_gt(ERR_EXIST)); + retcode = VE_EXIST; + myftype = '?'; + statError++; + } + } + if (!statError) { + /* determining actual type of existing object */ + switch (status.st_mode & S_IFMT) { + case S_IFLNK: + myftype = 's'; + break; + + case S_IFIFO: + myftype = 'p'; + break; + + case S_IFCHR: + myftype = 'c'; + break; + + case S_IFDIR: + myftype = 'd'; + targ_is_dir = 1; + break; + + case S_IFBLK: + myftype = 'b'; + break; + + case S_IFREG: + case 0: + myftype = 'f'; + break; + + case S_IFDOOR: + myftype = 'D'; + break; + + default: + reperr(pkg_gt(ERR_UNKNOWN)); + return (VE_FTYPE); + } + } if (setval) { /* |