[Midnightbsd-cvs] src [7515] trunk/lib/libmport/bundle_read_install_pkg.c: first pass at handling directory perms with @dir() syntax
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sat Apr 9 17:57:45 EDT 2016
Revision: 7515
http://svnweb.midnightbsd.org/src/?rev=7515
Author: laffer1
Date: 2016-04-09 17:57:45 -0400 (Sat, 09 Apr 2016)
Log Message:
-----------
first pass at handling directory perms with @dir() syntax
Modified Paths:
--------------
trunk/lib/libmport/bundle_read_install_pkg.c
Modified: trunk/lib/libmport/bundle_read_install_pkg.c
===================================================================
--- trunk/lib/libmport/bundle_read_install_pkg.c 2016-04-09 21:56:55 UTC (rev 7514)
+++ trunk/lib/libmport/bundle_read_install_pkg.c 2016-04-09 21:57:45 UTC (rev 7515)
@@ -155,6 +155,8 @@
gid_t group = 0; /* wheel */
mode_t *set;
mode_t newmode;
+ mode_t *dirset;
+ mode_t dirnewmode;
char *mode = NULL;
struct stat sb;
char file[FILENAME_MAX], cwd[FILENAME_MAX], dir[FILENAME_MAX];
@@ -260,10 +262,32 @@
case ASSET_DIR:
case ASSET_DIRRM:
case ASSET_DIRRMTRY:
- /* TODO: handle mode properly */
- if (stat(data, &sb) == -1)
+ case ASSET_DIR_OWNER_MODE:
+ if (stat(data, &sb) == -1)
mkdir(data, 0755); /* XXX: we ignore error because it's most likely already there */
- break;
+
+ if (stat(data, &sb))
+ goto ERROR;
+ if (fm_mode != NULL && fm_mode[0] != '\0') {
+ if ((dirset = setmode(fm_mode)) == NULL)
+ goto ERROR;
+ dirnewmode = getmode(dirset, sb.st_mode);
+ free(dirset);
+ if (chmod(data, dirnewmode))
+ goto ERROR;
+ }
+ if (fm_owner != NULL && fm_group != NULL && fm_owner[0] != '\0' && fm_group[0] != '\0') {
+ if (chown(data, mport_get_uid(fm_owner), mport_get_gid(fm_group)) == -1)
+ goto ERROR;
+ } else if (fm_owner != NULL && fm_owner[0] != '\0') {
+ if (chown(data, mport_get_uid(fm_owner), group) == -1)
+ goto ERROR;
+ } else if (fm_group != NULL && fm_group[0] != '\0') {
+ if (chown(data, owner, mport_get_gid(fm_group)) == -1)
+ goto ERROR;
+ }
+
+ break;
case ASSET_EXEC:
if (mport_run_asset_exec(mport, data, cwd, file) != MPORT_OK)
goto ERROR;
More information about the Midnightbsd-cvs
mailing list