14#include <zypp/AutoDispose.h>
33 static char * lastUname = NULL;
34 static size_t lastUnameLen = 0;
35 static size_t lastUnameAlloced;
37 struct passwd * pwent;
43 }
else if (strcmp(thisUname,
"root") == 0) {
50 thisUnameLen = strlen(thisUname);
51 if (lastUname == NULL || thisUnameLen != lastUnameLen ||
52 strcmp(thisUname, lastUname) != 0)
54 if (lastUnameAlloced < thisUnameLen + 1) {
55 lastUnameAlloced = thisUnameLen + 10;
56 lastUname = (
char *)realloc(lastUname, lastUnameAlloced);
59 strcpy(lastUname, thisUname);
62 pwent = getpwnam(thisUname);
67 pwent = getpwnam(thisUname);
68 if (pwent == NULL)
return -1;
71 lastUid = pwent->pw_uid;
83 static char * lastGname = NULL;
84 static size_t lastGnameLen = 0;
85 static size_t lastGnameAlloced;
90 if (thisGname == NULL) {
93 }
else if (strcmp(thisGname,
"root") == 0) {
100 thisGnameLen = strlen(thisGname);
101 if (lastGname == NULL || thisGnameLen != lastGnameLen ||
102 strcmp(thisGname, lastGname) != 0)
104 if (lastGnameAlloced < thisGnameLen + 1) {
105 lastGnameAlloced = thisGnameLen + 10;
106 lastGname = (
char *)realloc(lastGname, lastGnameAlloced);
109 strcpy(lastGname, thisGname);
112 grent = getgrnam(thisGname);
117 grent = getgrnam(thisGname);
120 if (strcmp(thisGname,
"lock") == 0) {
126 if (strcmp(thisGname,
"mail") == 0) {
135 lastGid = grent->gr_gid;
151#include <zypp/base/Easy.h>
152#include <zypp/base/Logger.h>
153#include <zypp/base/Exception.h>
158#include <zypp/PathInfo.h>
216 unsigned vsflag = RPMVSF_DEFAULT;
218 vsflag |= _RPMVSF_NODIGESTS;
220 vsflag |= _RPMVSF_NOSIGNATURES;
221 ::rpmtsSetVSFlags( ts, rpmVSFlags(vsflag) );
231 ERR <<
"Not a file: " << file << endl;
235 FD_t fd = ::Fopen( file.
asString().c_str(),
"r.ufdio" );
236 if ( fd == 0 || ::Ferror(fd) )
238 ERR <<
"Can't open file for reading: " << file <<
" (" << ::Fstrerror(fd) <<
")" << endl;
245 int res = ::rpmReadPackageFile( ts_r, fd, path_r.
asString().c_str(), &nh );
250 WAR <<
"Error reading header from " << path_r <<
" error(" << res <<
")" << endl;
257 MIL << h <<
" from " << path_r << endl;
258 return std::make_pair( h, res );
276 << (
isSrc() ?
".src}" :
"}");
289 return has_tag( RPMTAG_SOURCEPACKAGE );
294 return has_tag( RPMTAG_SOURCEPACKAGE ) && (
has_tag( RPMTAG_NOSOURCE ) ||
has_tag( RPMTAG_NOPATCH ) );
320 return int_val ( RPMTAG_EPOCH );
385 return int_val( RPMTAG_INSTALLTIME );
398 return int_val( RPMTAG_BUILDTIME );
413 rpmTag kindFlags = rpmTag(0);
414 rpmTag kindVersion = rpmTag(0);
418 case RPMTAG_REQUIRENAME:
419 kindFlags = RPMTAG_REQUIREFLAGS;
420 kindVersion = RPMTAG_REQUIREVERSION;
422 case RPMTAG_PROVIDENAME:
423 kindFlags = RPMTAG_PROVIDEFLAGS;
424 kindVersion = RPMTAG_PROVIDEVERSION;
426 case RPMTAG_OBSOLETENAME:
427 kindFlags = RPMTAG_OBSOLETEFLAGS;
428 kindVersion = RPMTAG_OBSOLETEVERSION;
430 case RPMTAG_CONFLICTNAME:
431 kindFlags = RPMTAG_CONFLICTFLAGS;
432 kindVersion = RPMTAG_CONFLICTVERSION;
434#ifdef RPMTAG_OLDSUGGESTS
435 case RPMTAG_OLDENHANCESNAME:
436 kindFlags = RPMTAG_OLDENHANCESFLAGS;
437 kindVersion = RPMTAG_OLDENHANCESVERSION;
439 case RPMTAG_OLDSUGGESTSNAME:
440 kindFlags = RPMTAG_OLDSUGGESTSFLAGS;
441 kindVersion = RPMTAG_OLDSUGGESTSVERSION;
443 case RPMTAG_RECOMMENDNAME:
444 kindFlags = RPMTAG_RECOMMENDFLAGS;
445 kindVersion = RPMTAG_RECOMMENDVERSION;
447 case RPMTAG_SUPPLEMENTNAME:
448 kindFlags = RPMTAG_SUPPLEMENTFLAGS;
449 kindVersion = RPMTAG_SUPPLEMENTVERSION;
451 case RPMTAG_SUGGESTNAME:
452 kindFlags = RPMTAG_SUGGESTFLAGS;
453 kindVersion = RPMTAG_SUGGESTVERSION;
455 case RPMTAG_ENHANCENAME:
456 kindFlags = RPMTAG_ENHANCEFLAGS;
457 kindVersion = RPMTAG_ENHANCEVERSION;
460 case RPMTAG_ENHANCESNAME:
461 kindFlags = RPMTAG_ENHANCESFLAGS;
462 kindVersion = RPMTAG_ENHANCESVERSION;
464 case RPMTAG_SUGGESTSNAME:
465 kindFlags = RPMTAG_SUGGESTSFLAGS;
466 kindVersion = RPMTAG_SUGGESTSVERSION;
470 INT <<
"Illegal RPMTAG_dependencyNAME " << tag_r << endl;
486 for (
unsigned i = 0; i < count; ++i )
489 std::string n( names[i] );
492 int32_t f = flags[i];
493 std::string v = versions[i];
506 switch ( f & RPMSENSE_SENSEMASK )
511 case RPMSENSE_LESS|RPMSENSE_EQUAL:
514 case RPMSENSE_GREATER:
517 case RPMSENSE_GREATER|RPMSENSE_EQUAL:
526 if ((pre && (f & RPMSENSE_PREREQ))
527 || ((! pre) && !(f & RPMSENSE_PREREQ)))
536 WAR <<
"Invalid capability: " << n <<
" " << op <<
" "
620#ifdef RPMTAG_OLDSUGGESTS
637#ifdef RPMTAG_OLDSUGGESTS
654#ifdef RPMTAG_OLDSUGGESTS
671#ifdef RPMTAG_OLDSUGGESTS
701 return int_val( RPMTAG_ARCHIVESIZE );
886 std::string sigInfo =
format(
"%|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{%|SIGGPG?{%{SIGGPG:pgpsig}}:{%|SIGPGP?{%{SIGPGP:pgpsig}}:{(none)}|}|}|}|");
889 if ( sigInfo ==
"(none)" )
890 return std::string();
892 std::vector<std::string> words;
893 str::split( sigInfo, std::back_inserter(words),
",");
894 if ( words.size() < 3)
895 return std::string();
897 const std::string &keyId = words[2];
899 return std::string();
914 std::list<std::string> ret;
922 int_list( RPMTAG_DIRINDEXES, dirindexes );
923 for (
unsigned i = 0; i < basenames.
size(); ++ i )
925 ret.push_back( dirnames[dirindexes[i]] + basenames[i] );
942 std::list<FileInfo> ret;
950 int_list( RPMTAG_DIRINDEXES, dirindexes );
952 int_list( RPMTAG_FILESIZES, filesizes );
964 int_list( RPMTAG_FILEMODES, filemodes );
966 int_list( RPMTAG_FILEMTIMES, filemtimes );
968 int_list( RPMTAG_FILEFLAGS, fileflags );
972 for (
unsigned i = 0; i < basenames.
size(); ++ i )
977 uid =
unameToUid( usernames[i].c_str(), &uid );
987 gid =
gnameToGid( groupnames[i].c_str(), &gid );
995 dirnames[dirindexes[i]] + basenames[i],
1000 mode_t(filemodes[i]),
1002 bool(fileflags[i] & RPMFILE_GHOST),
1006 ret.push_back( info );
1026 if (
int_list( RPMTAG_CHANGELOGTIME, times ) )
1032 for (
unsigned i = 0; i < times.
size(); ++ i )
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
Store and operate with byte count.
Single entry in a change log.
Store and operate on date (time_t).
Edition represents [epoch:]version[-release]
unsigned epoch_t
Type of an epoch.
Base class for Exception.
Wrapper class for ::stat/::lstat.
const std::string & asString() const
Return current Pathname as String.
const std::string & asString() const
String representation.
static bool globalInit()
Initialize lib librpm (read configfiles etc.).
String related utilities and Regular expression matching.
bool startsWith(const C_Str &str_r, const C_Str &prefix_r)
alias for hasPrefix
std::string toUpper(const std::string &s)
Return uppercase version of s.
unsigned split(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \t", const Trim trim_r=NO_TRIM)
Split line_r into words.
Easy-to use interface to the ZYPP dependency resolver.
std::unordered_set< Capability > CapabilitySet
std::list< ChangelogEntry > Changelog
List of ChangelogEntry.
#define ZYPP_CAUGHT(EXCPT)
Drops a logline telling the Exception was caught (in order to handle it).