31 static char * lastUname = NULL;
32 static size_t lastUnameLen = 0;
33 static size_t lastUnameAlloced;
35 struct passwd * pwent;
41 }
else if (strcmp(thisUname,
"root") == 0) {
48 thisUnameLen = strlen(thisUname);
49 if (lastUname == NULL || thisUnameLen != lastUnameLen ||
50 strcmp(thisUname, lastUname) != 0)
52 if (lastUnameAlloced < thisUnameLen + 1) {
53 lastUnameAlloced = thisUnameLen + 10;
54 lastUname = (
char *)realloc(lastUname, lastUnameAlloced);
57 strcpy(lastUname, thisUname);
60 pwent = getpwnam(thisUname);
65 pwent = getpwnam(thisUname);
66 if (pwent == NULL)
return -1;
69 lastUid = pwent->pw_uid;
81 static char * lastGname = NULL;
82 static size_t lastGnameLen = 0;
83 static size_t lastGnameAlloced;
88 if (thisGname == NULL) {
91 }
else if (strcmp(thisGname,
"root") == 0) {
98 thisGnameLen = strlen(thisGname);
99 if (lastGname == NULL || thisGnameLen != lastGnameLen ||
100 strcmp(thisGname, lastGname) != 0)
102 if (lastGnameAlloced < thisGnameLen + 1) {
103 lastGnameAlloced = thisGnameLen + 10;
104 lastGname = (
char *)realloc(lastGname, lastGnameAlloced);
107 strcpy(lastGname, thisGname);
110 grent = getgrnam(thisGname);
115 grent = getgrnam(thisGname);
118 if (strcmp(thisGname,
"lock") == 0) {
124 if (strcmp(thisGname,
"mail") == 0) {
133 lastGid = grent->gr_gid;
211 PathInfo file( path_r );
212 if ( ! file.isFile() )
214 ERR <<
"Not a file: " << file << endl;
218 FD_t fd = ::Fopen( file.asString().c_str(),
"r.ufdio" );
219 if ( fd == 0 || ::Ferror(fd) )
221 ERR <<
"Can't open file for reading: " << file <<
" (" << ::Fstrerror(fd) <<
")" << endl;
228 rpmts ts = ::rpmtsCreate();
229 unsigned vsflag = RPMVSF_DEFAULT;
231 vsflag |= _RPMVSF_NODIGESTS;
233 vsflag |= _RPMVSF_NOSIGNATURES;
234 ::rpmtsSetVSFlags( ts, rpmVSFlags(vsflag) );
237 int res = ::rpmReadPackageFile( ts, fd, path_r.asString().c_str(), &nh );
245 WAR <<
"Error reading header from " << path_r <<
" error(" << res <<
")" << endl;
252 MIL << h <<
" from " << path_r << endl;
271 << (
isSrc() ?
".src}" :
"}");
284 return has_tag( RPMTAG_SOURCEPACKAGE );
289 return has_tag( RPMTAG_SOURCEPACKAGE ) && (
has_tag( RPMTAG_NOSOURCE ) ||
has_tag( RPMTAG_NOPATCH ) );
315 return int_val ( RPMTAG_EPOCH );
380 return int_val( RPMTAG_INSTALLTIME );
393 return int_val( RPMTAG_BUILDTIME );
395 #warning CHECK IF FILE REQUIRES HANDLING IS OBSOLETE
408 rpmTag kindFlags = rpmTag(0);
409 rpmTag kindVersion = rpmTag(0);
413 case RPMTAG_REQUIRENAME:
414 kindFlags = RPMTAG_REQUIREFLAGS;
415 kindVersion = RPMTAG_REQUIREVERSION;
417 case RPMTAG_PROVIDENAME:
418 kindFlags = RPMTAG_PROVIDEFLAGS;
419 kindVersion = RPMTAG_PROVIDEVERSION;
421 case RPMTAG_OBSOLETENAME:
422 kindFlags = RPMTAG_OBSOLETEFLAGS;
423 kindVersion = RPMTAG_OBSOLETEVERSION;
425 case RPMTAG_CONFLICTNAME:
426 kindFlags = RPMTAG_CONFLICTFLAGS;
427 kindVersion = RPMTAG_CONFLICTVERSION;
429 #ifdef RPMTAG_OLDSUGGESTS
430 case RPMTAG_OLDENHANCESNAME:
431 kindFlags = RPMTAG_OLDENHANCESFLAGS;
432 kindVersion = RPMTAG_OLDENHANCESVERSION;
434 case RPMTAG_OLDSUGGESTSNAME:
435 kindFlags = RPMTAG_OLDSUGGESTSFLAGS;
436 kindVersion = RPMTAG_OLDSUGGESTSVERSION;
438 case RPMTAG_RECOMMENDNAME:
439 kindFlags = RPMTAG_RECOMMENDFLAGS;
440 kindVersion = RPMTAG_RECOMMENDVERSION;
442 case RPMTAG_SUPPLEMENTNAME:
443 kindFlags = RPMTAG_SUPPLEMENTFLAGS;
444 kindVersion = RPMTAG_SUPPLEMENTVERSION;
446 case RPMTAG_SUGGESTNAME:
447 kindFlags = RPMTAG_SUGGESTFLAGS;
448 kindVersion = RPMTAG_SUGGESTVERSION;
450 case RPMTAG_ENHANCENAME:
451 kindFlags = RPMTAG_ENHANCEFLAGS;
452 kindVersion = RPMTAG_ENHANCEVERSION;
455 case RPMTAG_ENHANCESNAME:
456 kindFlags = RPMTAG_ENHANCESFLAGS;
457 kindVersion = RPMTAG_ENHANCESVERSION;
459 case RPMTAG_SUGGESTSNAME:
460 kindFlags = RPMTAG_SUGGESTSFLAGS;
461 kindVersion = RPMTAG_SUGGESTSVERSION;
465 INT <<
"Illegal RPMTAG_dependencyNAME " << tag_r << endl;
481 for (
unsigned i = 0; i < count; ++i )
484 std::string n( names[i] );
487 int32_t f = flags[i];
488 std::string v = versions[i];
501 switch ( f & RPMSENSE_SENSEMASK )
506 case RPMSENSE_LESS|RPMSENSE_EQUAL:
509 case RPMSENSE_GREATER:
512 case RPMSENSE_GREATER|RPMSENSE_EQUAL:
521 if ((pre && (f & RPMSENSE_PREREQ))
522 || ((! pre) && !(f & RPMSENSE_PREREQ)))
531 WAR <<
"Invalid capability: " << n <<
" " << op <<
" "
615 #ifdef RPMTAG_OLDSUGGESTS
632 #ifdef RPMTAG_OLDSUGGESTS
649 #ifdef RPMTAG_OLDSUGGESTS
666 #ifdef RPMTAG_OLDSUGGESTS
696 return int_val( RPMTAG_ARCHIVESIZE );
864 {
return string_val( RPMTAG_POSTTRANSPROG ); }
889 std::list<std::string> ret;
897 int_list( RPMTAG_DIRINDEXES, dirindexes );
898 for (
unsigned i = 0; i < basenames.
size(); ++ i )
900 ret.push_back( dirnames[dirindexes[i]] + basenames[i] );
917 std::list<FileInfo> ret;
925 int_list( RPMTAG_DIRINDEXES, dirindexes );
927 int_list( RPMTAG_FILESIZES, filesizes );
939 int_list( RPMTAG_FILEMODES, filemodes );
941 int_list( RPMTAG_FILEMTIMES, filemtimes );
943 int_list( RPMTAG_FILEFLAGS, fileflags );
947 for (
unsigned i = 0; i < basenames.
size(); ++ i )
952 uid =
unameToUid( usernames[i].c_str(), &uid );
962 gid =
gnameToGid( groupnames[i].c_str(), &gid );
970 dirnames[dirindexes[i]] + basenames[i],
975 mode_t(filemodes[i]),
977 bool(fileflags[i] & RPMFILE_GHOST),
981 ret.push_back( info );
1001 if (
int_list( RPMTAG_CHANGELOGTIME, times ) )
1007 for (
unsigned i = 0; i < times.
size(); ++ i )
Store and operate with byte count.
Single entry in a change log.
std::list< ChangelogEntry > Changelog
List of ChangelogEntry.
Edition represents [epoch:]version[-release]
unsigned epoch_t
Type of an epoch.
Store and operate on date (time_t).
#define ZYPP_CAUGHT(EXCPT)
Drops a logline telling the Exception was caught (in order to handle it).
std::unordered_set< Capability > CapabilitySet
Base class for Exception.
static bool globalInit()
Initialize lib librpm (read configfiles etc.).