Date: Fri, 20 Aug 2010 07:35:08 GMT From: David Forsythe <dforsyth@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 182645 for review Message-ID: <201008200735.o7K7Z80x030997@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@182645?ac=10 Change 182645 by dforsyth@skunk on 2010/08/20 07:34:42 A few of the changes Tim suggested. This is the main libpkg repository now. Affected files ... .. //depot/projects/soc2010/dforsyth_libpkg/doc/man/pkg_database.3#1 add .. //depot/projects/soc2010/dforsyth_libpkg/doc/man/pkg_freebsd.3#1 add .. //depot/projects/soc2010/dforsyth_libpkg/doc/man/pkg_repository.3#1 add .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/Makefile#3 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/base.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/database.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/database.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/database_internal.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/exec.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/exec.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/exec_internal.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_database_directorydb.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_database_directorydb.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_plist.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_plist.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_repository_ftp.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_repository_ftp.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_repository_path.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_repository_path.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/internal.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/logger.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/logger.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg.c#3 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg.h#3 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_freebsd.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_freebsd.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_internal.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_pkg.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/property.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/property.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/repository.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/repository.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/repository_internal.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/util.c#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/util.h#2 edit Differences ... ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/Makefile#3 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/base.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/database.c#2 (text+ko) ==== @@ -49,17 +49,20 @@ } /* Release a package database from memory. */ -void +int pkg_database_release(struct pkg_database *db) { _pkg_database_check_magic(db, __func__); if (db->status != CLOSED) { - warnx("closing pkg_database before free()"); - db->vtable->close(db); + if (db->vtable->close(db) != PKG_OK) { + warnx("db->vtable->close() failed."); + return (PKG_NOT_OK); + } } + free(db); - free(db); + return (PKG_OK); } void @@ -169,8 +172,7 @@ _pkg_check_magic(p, __func__); if (db->status != OPEN) { - /* Just leave. */ - return (PKG_NOT_OK); + PKG_CLIENT_CRASH(__func__, "db->status != OPEN"); } /* Log this action. */ /* ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/database.h#2 (text+ko) ==== @@ -15,7 +15,9 @@ struct pkg_database *pkg_database_create(void); -void pkg_database_release(struct pkg_database *); +int pkg_database_release(struct pkg_database *); + +uid_t pkg_database_owner(struct pkg_database *); /* Get the next package in a database. */ int pkg_database_get_next_pkg(struct pkg_database *, struct pkg *, u_int); ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/database_internal.h#2 (text+ko) ==== @@ -16,6 +16,7 @@ int (*get_pkg) (struct pkg_database *, struct pkg *, u_int); int (*rewind) (struct pkg_database *); int (*open) (struct pkg_database *, const char *, u_int); + uid_t (*owner) (struct pkg_database *); }; /* Define the package database type. */ ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/exec.c#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/exec.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/exec_internal.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_database_directorydb.c#2 (text+ko) ==== @@ -26,6 +26,7 @@ static int _write_pkg(struct pkg_database *, struct pkg *, u_int); static int _pkg_database_directorydb_open(struct pkg_database *, const char *, u_int); +static uid_t _pkg_database_directorydb_owner(struct pkg_database *); static int _pkg_database_directorydb_rewind(struct pkg_database *); static int _pkg_database_directorydb_close(struct pkg_database *); static int _pkg_database_directorydb_add_pkg(struct pkg_database *, @@ -41,7 +42,8 @@ .add_pkg = _pkg_database_directorydb_add_pkg, .remove_pkg = _pkg_database_directorydb_remove_pkg, .rewind = _pkg_database_directorydb_rewind, - .get_next_pkg = _pkg_database_directorydb_get_next_pkg + .get_next_pkg = _pkg_database_directorydb_get_next_pkg, + .owner = _pkg_database_directorydb_owner }; @@ -74,6 +76,20 @@ return ("directorydb"); } +static uid_t +_pkg_database_directorydb_owner(struct pkg_database *db) +{ + struct _directorydb *d; + struct stat sb; + + d = db->internal; + if (d == NULL || lstat(d->location[0], &sb) < 0) { + return (-1); + } + + return (sb.st_uid); +} + static int _pkg_database_directorydb_open(struct pkg_database *db, const char *path, u_int flags) ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_database_directorydb.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_plist.c#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_plist.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_repository_ftp.c#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_repository_ftp.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_repository_path.c#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_repository_path.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/internal.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/logger.c#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/logger.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg.c#3 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg.h#3 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_freebsd.c#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_freebsd.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_internal.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_pkg.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/property.c#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/property.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/repository.c#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/repository.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/repository_internal.h#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/util.c#2 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/util.h#2 (text+ko) ====
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008200735.o7K7Z80x030997>