summaryrefslogtreecommitdiff
path: root/usr/src/lib/libpkg/common
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libpkg/common')
-rw-r--r--usr/src/lib/libpkg/common/isdir.c84
-rw-r--r--usr/src/lib/libpkg/common/mapfile-vers1
-rw-r--r--usr/src/lib/libpkg/common/pkglib.h4
-rw-r--r--usr/src/lib/libpkg/common/verify.c72
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) {
/*