4 /* This is the *only* module users of rpmlib should need to include */
6 /* and it shouldn't need these :-( */
17 int rpmReadPackageInfo(FD_t fd, /*@out@*/ Header * signatures,
18 /*@out@*/ Header * hdr);
19 int rpmReadPackageHeader(FD_t fd, /*@out@*/ Header * hdr,
20 /*@out@*/ int * isSource, /*@out@*/ int * major, /*@out@*/ int * minor);
22 int headerNVR(Header h, /*@out@*/ const char **np, /*@out@*/ const char **vp,
23 /*@out@*/ const char **rp);
25 void rpmBuildFileList(Header h, /*@out@*/ const char *** fileListPtr,
26 /*@out@*/ int * fileCountPtr);
29 * XXX This is a "dressed" entry to headerGetEntry to do:
30 * 1) DIRNAME/BASENAME/DIRINDICES -> FILENAMES tag conversions.
31 * 2) i18n lookaside (if enabled).
33 int rpmHeaderGetEntry(Header h, int_32 tag, /*@out@*/ int_32 *type,
34 /*@out@*/ void **p, /*@out@*/int_32 *c);
40 extern const struct headerTagTableEntry rpmTagTable[];
41 extern const int rpmTagTableSize;
43 /* this chains to headerDefaultFormats[] */
44 extern const struct headerSprintfExtension rpmHeaderFormats[];
46 /* these tags are for both the database and packages */
47 /* none of these can be 0 !! */
49 #define RPMTAG_NAME 1000
50 #define RPMTAG_VERSION 1001
51 #define RPMTAG_RELEASE 1002
52 #define RPMTAG_EPOCH 1003
53 #define RPMTAG_SERIAL RPMTAG_EPOCH /* backward comaptibility */
54 #define RPMTAG_SUMMARY 1004
55 #define RPMTAG_DESCRIPTION 1005
56 #define RPMTAG_BUILDTIME 1006
57 #define RPMTAG_BUILDHOST 1007
58 #define RPMTAG_INSTALLTIME 1008
59 #define RPMTAG_SIZE 1009
60 #define RPMTAG_DISTRIBUTION 1010
61 #define RPMTAG_VENDOR 1011
62 #define RPMTAG_GIF 1012
63 #define RPMTAG_XPM 1013
64 #define RPMTAG_LICENSE 1014
65 #define RPMTAG_COPYRIGHT RPMTAG_LICENSE /* backward comaptibility */
66 #define RPMTAG_PACKAGER 1015
67 #define RPMTAG_GROUP 1016
68 #define RPMTAG_CHANGELOG 1017 /* internal */
69 #define RPMTAG_SOURCE 1018
70 #define RPMTAG_PATCH 1019
71 #define RPMTAG_URL 1020
72 #define RPMTAG_OS 1021
73 #define RPMTAG_ARCH 1022
74 #define RPMTAG_PREIN 1023
75 #define RPMTAG_POSTIN 1024
76 #define RPMTAG_PREUN 1025
77 #define RPMTAG_POSTUN 1026
78 #define RPMTAG_OLDFILENAMES 1027 /* obsolete */
79 #define RPMTAG_FILESIZES 1028
80 #define RPMTAG_FILESTATES 1029
81 #define RPMTAG_FILEMODES 1030
82 #define RPMTAG_FILEUIDS 1031 /* internal */
83 #define RPMTAG_FILEGIDS 1032 /* internal */
84 #define RPMTAG_FILERDEVS 1033
85 #define RPMTAG_FILEMTIMES 1034
86 #define RPMTAG_FILEMD5S 1035
87 #define RPMTAG_FILELINKTOS 1036
88 #define RPMTAG_FILEFLAGS 1037
89 #define RPMTAG_ROOT 1038 /* obsolete */
90 #define RPMTAG_FILEUSERNAME 1039
91 #define RPMTAG_FILEGROUPNAME 1040
92 #define RPMTAG_EXCLUDE 1041 /* internal - depricated */
93 #define RPMTAG_EXCLUSIVE 1042 /* internal - depricated */
94 #define RPMTAG_ICON 1043
95 #define RPMTAG_SOURCERPM 1044
96 #define RPMTAG_FILEVERIFYFLAGS 1045
97 #define RPMTAG_ARCHIVESIZE 1046
98 #define RPMTAG_PROVIDENAME 1047
99 #define RPMTAG_PROVIDES RPMTAG_PROVIDENAME /* backward comaptibility */
100 #define RPMTAG_REQUIREFLAGS 1048
101 #define RPMTAG_REQUIRENAME 1049
102 #define RPMTAG_REQUIREVERSION 1050
103 #define RPMTAG_NOSOURCE 1051 /* internal */
104 #define RPMTAG_NOPATCH 1052 /* internal */
105 #define RPMTAG_CONFLICTFLAGS 1053
106 #define RPMTAG_CONFLICTNAME 1054
107 #define RPMTAG_CONFLICTVERSION 1055
108 #define RPMTAG_DEFAULTPREFIX 1056 /* internal - deprecated */
109 #define RPMTAG_BUILDROOT 1057
110 #define RPMTAG_INSTALLPREFIX 1058 /* internal - deprecated */
111 #define RPMTAG_EXCLUDEARCH 1059
112 #define RPMTAG_EXCLUDEOS 1060
113 #define RPMTAG_EXCLUSIVEARCH 1061
114 #define RPMTAG_EXCLUSIVEOS 1062
115 #define RPMTAG_AUTOREQPROV 1063 /* internal */
116 #define RPMTAG_RPMVERSION 1064
117 #define RPMTAG_TRIGGERSCRIPTS 1065
118 #define RPMTAG_TRIGGERNAME 1066
119 #define RPMTAG_TRIGGERVERSION 1067
120 #define RPMTAG_TRIGGERFLAGS 1068
121 #define RPMTAG_TRIGGERINDEX 1069
122 #define RPMTAG_VERIFYSCRIPT 1079
123 #define RPMTAG_CHANGELOGTIME 1080
124 #define RPMTAG_CHANGELOGNAME 1081
125 #define RPMTAG_CHANGELOGTEXT 1082
126 #define RPMTAG_BROKENMD5 1083 /* internal */
127 #define RPMTAG_PREREQ 1084 /* internal */
128 #define RPMTAG_PREINPROG 1085
129 #define RPMTAG_POSTINPROG 1086
130 #define RPMTAG_PREUNPROG 1087
131 #define RPMTAG_POSTUNPROG 1088
132 #define RPMTAG_BUILDARCHS 1089
133 #define RPMTAG_OBSOLETENAME 1090
134 #define RPMTAG_OBSOLETES RPMTAG_OBSOLETENAME /* backward comaptibility */
135 #define RPMTAG_VERIFYSCRIPTPROG 1091
136 #define RPMTAG_TRIGGERSCRIPTPROG 1092
137 #define RPMTAG_DOCDIR 1093 /* internal */
138 #define RPMTAG_COOKIE 1094
139 #define RPMTAG_FILEDEVICES 1095
140 #define RPMTAG_FILEINODES 1096
141 #define RPMTAG_FILELANGS 1097
142 #define RPMTAG_PREFIXES 1098
143 #define RPMTAG_INSTPREFIXES 1099
144 #define RPMTAG_TRIGGERIN 1100 /* internal */
145 #define RPMTAG_TRIGGERUN 1101 /* internal */
146 #define RPMTAG_TRIGGERPOSTUN 1102 /* internal */
147 #define RPMTAG_AUTOREQ 1103 /* internal */
148 #define RPMTAG_AUTOPROV 1104 /* internal */
149 #define RPMTAG_CAPABILITY 1105 /* unused */
150 #define RPMTAG_SOURCEPACKAGE 1106 /* internal */
151 #define RPMTAG_OLDORIGFILENAMES 1107 /* obsolete */
152 #define RPMTAG_BUILDPREREQ 1108 /* internal */
153 #define RPMTAG_BUILDREQUIRES 1109 /* internal */
154 #define RPMTAG_BUILDCONFLICTS 1110 /* internal */
155 #define RPMTAG_BUILDMACROS 1111
156 #define RPMTAG_PROVIDEFLAGS 1112
157 #define RPMTAG_PROVIDEVERSION 1113
158 #define RPMTAG_OBSOLETEFLAGS 1114
159 #define RPMTAG_OBSOLETEVERSION 1115
160 #define RPMTAG_DIRINDEXES 1116
161 #define RPMTAG_BASENAMES 1117
162 #define RPMTAG_DIRNAMES 1118
163 #define RPMTAG_ORIGDIRINDEXES 1119 /* internal */
164 #define RPMTAG_ORIGBASENAMES 1120 /* internal */
165 #define RPMTAG_ORIGDIRNAMES 1121 /* internal */
167 #define RPMTAG_FIRSTFREE_TAG 1122 /* internal */
168 #define RPMTAG_EXTERNAL_TAG 1000000
170 #define RPMFILE_STATE_NORMAL 0
171 #define RPMFILE_STATE_REPLACED 1
172 #define RPMFILE_STATE_NOTINSTALLED 2
173 #define RPMFILE_STATE_NETSHARED 3
175 /* these can be ORed together */
176 #define RPMFILE_CONFIG (1 << 0)
177 #define RPMFILE_DOC (1 << 1)
178 #define RPMFILE_DONOTUSE (1 << 2)
179 #define RPMFILE_MISSINGOK (1 << 3)
180 #define RPMFILE_NOREPLACE (1 << 4)
181 #define RPMFILE_SPECFILE (1 << 5)
182 #define RPMFILE_GHOST (1 << 6)
183 #define RPMFILE_LICENSE (1 << 7)
184 #define RPMFILE_README (1 << 8)
186 #define RPMVERIFY_NONE 0
187 #define RPMVERIFY_MD5 (1 << 0)
188 #define RPMVERIFY_FILESIZE (1 << 1)
189 #define RPMVERIFY_LINKTO (1 << 2)
190 #define RPMVERIFY_USER (1 << 3)
191 #define RPMVERIFY_GROUP (1 << 4)
192 #define RPMVERIFY_MTIME (1 << 5)
193 #define RPMVERIFY_MODE (1 << 6)
194 #define RPMVERIFY_RDEV (1 << 7)
195 #define RPMVERIFY_READLINKFAIL (1 << 28)
196 #define RPMVERIFY_READFAIL (1 << 29)
197 #define RPMVERIFY_LSTATFAIL (1 << 30)
199 #define RPMVERIFY_ALL ~(RPMVERIFY_NONE)
201 #define RPMSENSE_ANY 0
202 #define RPMSENSE_SERIAL (1 << 0) /* eliminated, backward compatibilty */
203 #define RPMSENSE_LESS (1 << 1)
204 #define RPMSENSE_GREATER (1 << 2)
205 #define RPMSENSE_EQUAL (1 << 3)
206 #define RPMSENSE_PROVIDES (1 << 4) /* only used internally by builds */
207 #define RPMSENSE_CONFLICTS (1 << 5) /* only used internally by builds */
208 #define RPMSENSE_PREREQ (1 << 6)
209 #define RPMSENSE_OBSOLETES (1 << 7) /* only used internally by builds */
210 #define RPMSENSE_SENSEMASK 15 /* Mask to get senses, ie serial, */
211 /* less, greater, equal. */
213 #define RPMSENSE_TRIGGERIN (1 << 16)
214 #define RPMSENSE_TRIGGERUN (1 << 17)
215 #define RPMSENSE_TRIGGERPOSTUN (1 << 18)
216 #define RPMSENSE_TRIGGER (RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | \
217 RPMSENSE_TRIGGERPOSTUN)
219 /* Stuff for maintaining "variables" like SOURCEDIR, BUILDDIR, etc */
221 /* #define RPMVAR_SOURCEDIR 0 -- No longer used */
222 /* #define RPMVAR_BUILDDIR 1 -- No longer used */
223 /* #define RPMVAR_DOCDIR 2 -- No longer used */
224 #define RPMVAR_OPTFLAGS 3
225 /* #define RPMVAR_TOPDIR 4 -- No longer used */
226 /* #define RPMVAR_SPECDIR 5 -- No longer used */
227 /* #define RPMVAR_ROOT 6 -- No longer used */
228 /* #define RPMVAR_RPMDIR 7 -- No longer used */
229 /* #define RPMVAR_SRPMDIR 8 -- No longer used */
230 /* #define RPMVAR_ARCHSENSITIVE 9 -- No longer used */
231 /* #define RPMVAR_REQUIREDISTRIBUTION 10 -- No longer used */
232 /* #define RPMVAR_REQUIREGROUP 11 -- No longer used */
233 /* #define RPMVAR_REQUIREVENDOR 12 -- No longer used */
234 /* #define RPMVAR_DISTRIBUTION 13 -- No longer used */
235 /* #define RPMVAR_VENDOR 14 -- No longer used */
236 /* #define RPMVAR_MESSAGELEVEL 15 -- No longer used */
237 /* #define RPMVAR_REQUIREICON 16 -- No longer used */
238 /* #define RPMVAR_TIMECHECK 17 -- No longer used */
239 /* #define RPMVAR_SIGTYPE 18 -- No longer used */
240 /* #define RPMVAR_PGP_PATH 19 -- No longer used */
241 /* #define RPMVAR_PGP_NAME 20 -- No longer used */
242 /* #define RPMVAR_PGP_SECRING 21 -- No longer used */
243 /* #define RPMVAR_PGP_PUBRING 22 -- No longer used */
244 /* #define RPMVAR_EXCLUDEDOCS 23 -- No longer used */
245 /* #define RPMVAR_BUILDARCH 24 -- No longer used */
246 /* #define RPMVAR_BUILDOS 25 -- No longer used */
247 /* #define RPMVAR_BUILDROOT 26 */
248 /* #define RPMVAR_DBPATH 27 -- No longer used */
249 /* #define RPMVAR_PACKAGER 28 -- No longer used */
250 /* #define RPMVAR_FTPPROXY 29 -- No longer used */
251 /* #define RPMVAR_TMPPATH 30 -- No longer used */
252 /* #define RPMVAR_CPIOBIN 31 -- No longer used */
253 /* #define RPMVAR_FTPPORT 32 -- No longer used */
254 /* #define RPMVAR_NETSHAREDPATH 33 -- No longer used */
255 /* #define RPMVAR_DEFAULTDOCDIR 34 -- No longer used */
256 /* #define RPMVAR_FIXPERMS 35 -- No longer used */
257 /* #define RPMVAR_GZIPBIN 36 -- No longer used */
258 /* #define RPMVAR_RPMFILENAME 37 -- No longer used */
259 #define RPMVAR_PROVIDES 38
260 /* #define RPMVAR_BUILDSHELL 39 -- No longer used */
261 /* #define RPMVAR_INSTCHANGELOG 40 -- No longer used */
262 /* #define RPMVAR_BZIP2BIN 41 -- No longer used */
263 /* #define RPMVAR_LANGPATT 42 -- No longer used */
264 #define RPMVAR_INCLUDE 43
265 /* #define RPMVAR_ARCH 44 -- No longer used */
266 /* #define RPMVAR_OS 45 -- No longer used */
267 /* #define RPMVAR_BUILDPLATFORM 46 -- No longer used */
268 /* #define RPMVAR_BUILDARCH 47 -- No longer used */
269 /* #define RPMVAR_BUILDOS 48 -- No longer used */
270 #define RPMVAR_MACROFILES 49
271 /* #define RPMVAR_GPG_PATH 51 -- No longer used */
272 /* #define RPMVAR_GPG_NAME 52 -- No longer used */
273 /* #define RPMVAR_HTTPPROXY 53 -- No longer used */
274 /* #define RPMVAR_HTTPPORT 54 -- No longer used */
276 #define RPMVAR_NUM 55 /* number of RPMVAR entries */
278 #define xfree(_p) free((void *)_p)
280 const char * rpmGetVar(int var);
281 void rpmSetVar(int var, const char *val);
285 #define RPM_MACHTABLE_INSTARCH 0
286 #define RPM_MACHTABLE_INSTOS 1
287 #define RPM_MACHTABLE_BUILDARCH 2
288 #define RPM_MACHTABLE_BUILDOS 3
289 #define RPM_MACHTABLE_COUNT 4 /* number of arch/os tables */
291 int rpmReadConfigFiles(const char * file, const char * target);
292 int rpmReadRC(const char * file);
293 void rpmGetArchInfo( /*@out@*/ const char ** name, /*@out@*/ int * num);
294 void rpmGetOsInfo( /*@out@*/ const char ** name, /*@out@*/ int * num);
295 int rpmMachineScore(int type, const char * name);
296 int rpmShowRC(FILE *f);
297 void rpmSetTables(int archTable, int osTable); /* only used by build code */
298 /* if either are NULL, they are set to the default value (munged uname())
299 pushed through a translation table (if appropriate) */
300 void rpmSetMachine(const char * arch, const char * os);
301 void rpmGetMachine( /*@out@*/ const char **arch, /*@out@*/ const char **os);
302 void rpmFreeRpmrc(void);
306 typedef /*@abstract@*/ struct rpmdb_s * rpmdb;
308 typedef enum rpmCallbackType_e {
309 RPMCALLBACK_INST_PROGRESS, RPMCALLBACK_INST_START,
310 RPMCALLBACK_INST_OPEN_FILE, RPMCALLBACK_INST_CLOSE_FILE,
311 RPMCALLBACK_TRANS_PROGRESS, RPMCALLBACK_TRANS_START, RPMCALLBACK_TRANS_STOP,
312 RPMCALLBACK_UNINST_PROGRESS, RPMCALLBACK_UNINST_START, RPMCALLBACK_UNINST_STOP
314 typedef void * (*rpmCallbackFunction)(const Header h,
315 const rpmCallbackType what,
316 const unsigned long amount,
317 const unsigned long total,
318 const void * pkgKey, void * data);
320 void urlSetCallback(rpmCallbackFunction notify, void *notifyData, int notifyCount);
322 int rpmdbOpen (const char * root, /*@out@*/ rpmdb * dbp, int mode, int perms);
324 int rpmdbInit(const char * root, int perms);
325 /* nonzero on error */
326 void rpmdbClose ( /*@only@*/ rpmdb db);
327 /* Databases like this should only have rpmdb*RecNum and rpmdbGetRecord
328 used on them. Anything else could fail! */
329 int rpmdbOpenForTraversal(const char * prefix, /*@out@*/ rpmdb * rpmdbp);
331 int rpmdbFirstRecNum(rpmdb db);
332 int rpmdbNextRecNum(rpmdb db, unsigned int lastOffset);
333 /* 0 at end, -1 on error */
335 Header rpmdbGetRecord(rpmdb db, unsigned int offset);
336 int rpmdbFindByFile(rpmdb db, const char * filespec,
337 /*@out@*/ dbiIndexSet * matches);
338 int rpmdbFindByGroup(rpmdb db, const char * group,
339 /*@out@*/ dbiIndexSet * matches);
340 int rpmdbFindPackage(rpmdb db, const char * name,
341 /*@out@*/ dbiIndexSet * matches);
342 int rpmdbFindByProvides(rpmdb db, const char * provides,
343 /*@out@*/ dbiIndexSet * matches);
344 int rpmdbFindByRequiredBy(rpmdb db, const char * requires,
345 /*@out@*/ dbiIndexSet * matches);
346 int rpmdbFindByConflicts(rpmdb db, const char * conflicts,
347 /*@out@*/ dbiIndexSet * matches);
348 int rpmdbFindByTriggeredBy(rpmdb db, const char * package,
349 /*@out@*/ dbiIndexSet * matches);
351 /* these are just convenience functions */
352 int rpmdbFindByLabel(rpmdb db, const char * label,
353 /*@out@*/ dbiIndexSet * matches);
354 int rpmdbFindByHeader(rpmdb db, Header h,
355 /*@out@*/ dbiIndexSet * matches);
357 /* we pass these around as an array with a sentinel */
358 typedef struct rpmRelocation_s {
359 const char * oldPath; /* NULL here evals to RPMTAG_DEFAULTPREFIX, */
360 /* XXX for backwards compatibility */
361 const char * newPath; /* NULL means to omit the file completely! */
364 int rpmInstallSourcePackage(const char * root, FD_t fd, const char ** specFile,
365 rpmCallbackFunction notify, void * notifyData,
367 int rpmVersionCompare(Header first, Header second);
368 int rpmdbRebuild(const char * root);
370 int rpmVerifyFile(const char * root, Header h, int filenum,
371 /*@out@*/ int * result, int omitMask);
372 int rpmVerifyScript(const char * root, Header h, FD_t err);
374 /* Transaction sets are inherently unordered! RPM may reorder transaction
375 sets to reduce errors. In general, installs/upgrades are done before
376 strict removals, and prerequisite ordering is done on installs/upgrades. */
377 typedef /*@abstract@*/ struct rpmTransactionSet_s * rpmTransactionSet;
379 struct rpmDependencyConflict {
380 char * byName, * byVersion, * byRelease;
382 /* these needs fields are misnamed -- they are used for the package
383 which isn't needed as well */
384 char * needsName, * needsVersion;
386 /*@observer@*/ /*@null@*/ const void * suggestedPackage; /* NULL if none */
387 enum { RPMDEP_SENSE_REQUIRES, RPMDEP_SENSE_CONFLICTS } sense;
390 /* db may be NULL, but don't do things which require the database! */
391 /*@only@*/ rpmTransactionSet rpmtransCreateSet( /*@only@*/ rpmdb db,
392 const char * rootdir);
394 /* if fd is NULL, the callback specified in rpmtransCreateSet() is used to
395 open and close the file descriptor. If Header is NULL, the fd is always
396 used, otherwise fd is only needed (and only opened) for actual package
399 returns 0 on success, 1 on I/O error, 2 if the package needs capabilities
400 which are not implemented */
401 int rpmtransAddPackage(rpmTransactionSet rpmdep, Header h, FD_t fd,
402 /*@owned@*/ const void * key, int update,
403 rpmRelocation * relocs);
404 void rpmtransAvailablePackage(rpmTransactionSet rpmdep, Header h,
405 /*@owned@*/ const void * key);
406 void rpmtransRemovePackage(rpmTransactionSet rpmdep, int dboffset);
407 void rpmtransFree( /*@only@*/ rpmTransactionSet rpmdep);
408 void rpmtransSetScriptFd(rpmTransactionSet ts, FD_t fd);
410 /* this checks for dependency satisfaction, but *not* ordering */
411 int rpmdepCheck(rpmTransactionSet rpmdep,
412 /*@exposed@*/ /*@out@*/ struct rpmDependencyConflict ** conflicts,
413 /*@exposed@*/ /*@out@*/ int * numConflicts);
415 /* Orders items, returns error on circle, finals keys[] is NULL. No dependency
416 check is done, use rpmdepCheck() for that. If dependencies are not
417 satisfied a "best-try" ordering is returned. */
418 int rpmdepOrder(rpmTransactionSet order);
419 void rpmdepFreeConflicts( /*@only@*/ struct rpmDependencyConflict * conflicts,
422 #define RPMTRANS_FLAG_TEST (1 << 0)
423 #define RPMTRANS_FLAG_BUILD_PROBS (1 << 1)
424 #define RPMTRANS_FLAG_NOSCRIPTS (1 << 2)
425 #define RPMTRANS_FLAG_JUSTDB (1 << 3)
426 #define RPMTRANS_FLAG_NOTRIGGERS (1 << 4)
427 #define RPMTRANS_FLAG_NODOCS (1 << 5)
428 #define RPMTRANS_FLAG_ALLFILES (1 << 6)
429 #define RPMTRANS_FLAG_KEEPOBSOLETE (1 << 7)
431 typedef enum rpmProblemType_e { RPMPROB_BADARCH,
433 RPMPROB_PKG_INSTALLED,
437 RPMPROB_NEW_FILE_CONFLICT,
438 RPMPROB_FILE_CONFLICT,
443 typedef /*@abstract@*/ struct rpmProblem_s {
445 /*@dependent@*/ const void * key;
448 /*@only@*/ const char * str1;
449 unsigned long ulong1;
452 typedef /*@abstract@*/ struct rpmProblemSet_s {
454 int numProblemsAlloced;
458 void printDepFlags(FILE *fp, const char *version, int flags);
459 void printDepProblems(FILE *fp, struct rpmDependencyConflict *conflicts,
462 /*@only@*/ const char * rpmProblemString(rpmProblem prob);
463 void rpmProblemPrint(FILE *fp, rpmProblem prob);
464 void rpmProblemSetPrint(FILE *fp, rpmProblemSet probs);
466 void rpmProblemSetFree( /*@only@*/ rpmProblemSet probs);
468 int rpmRunTransactions(rpmTransactionSet ts, rpmCallbackFunction notify,
469 void * notifyData, rpmProblemSet okProbs,
470 /*@out@*/ rpmProblemSet * newProbs, int flags,
473 #define RPMPROB_FILTER_IGNOREOS (1 << 0)
474 #define RPMPROB_FILTER_IGNOREARCH (1 << 1)
475 #define RPMPROB_FILTER_REPLACEPKG (1 << 2)
476 #define RPMPROB_FILTER_FORCERELOCATE (1 << 3)
477 #define RPMPROB_FILTER_REPLACENEWFILES (1 << 4)
478 #define RPMPROB_FILTER_REPLACEOLDFILES (1 << 5)
479 #define RPMPROB_FILTER_OLDPACKAGE (1 << 6)
480 #define RPMPROB_FILTER_DISKSPACE (1 << 7)
484 #define RPMMESS_DEBUG 1
485 #define RPMMESS_VERBOSE 2
486 #define RPMMESS_NORMAL 3
487 #define RPMMESS_WARNING 4
488 #define RPMMESS_ERROR 5
489 #define RPMMESS_FATALERROR 6
491 #define RPMMESS_QUIET (RPMMESS_NORMAL + 1)
493 void rpmIncreaseVerbosity(void);
494 void rpmSetVerbosity(int level);
495 int rpmGetVerbosity(void);
496 int rpmIsVerbose(void);
497 int rpmIsDebug(void);
498 void rpmMessage(int level, const char * format, ...);
502 #define RPMLEAD_BINARY 0
503 #define RPMLEAD_SOURCE 1
505 #define RPMLEAD_MAGIC0 0xed
506 #define RPMLEAD_MAGIC1 0xab
507 #define RPMLEAD_MAGIC2 0xee
508 #define RPMLEAD_MAGIC3 0xdb
510 /* The lead needs to be 8 byte aligned */
512 #define RPMLEAD_SIZE 96
515 unsigned char magic[4];
516 unsigned char major, minor;
521 short signature_type;
522 char reserved[16]; /* pads to 96 bytes -- 8 byte aligned! */
525 struct oldrpmlead { /* for version 1 packages */
526 unsigned char magic[4];
527 unsigned char major, minor;
531 unsigned int specOffset;
532 unsigned int specLength;
533 unsigned int archiveOffset;
538 typedef void (*rpmErrorCallBackType)(void);
540 #if defined(__GNUC__)
541 void rpmError(int code, char * format, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
543 void rpmError(int code, char * format, ...);
546 int rpmErrorCode(void);
547 char *rpmErrorCodeString(void);
548 char *rpmErrorString(void);
549 rpmErrorCallBackType rpmErrorSetCallback(rpmErrorCallBackType);
551 #define RPMERR_GDBMOPEN -2 /* gdbm open failed */
552 #define RPMERR_GDBMREAD -3 /* gdbm read failed */
553 #define RPMERR_GDBMWRITE -4 /* gdbm write failed */
554 #define RPMERR_INTERNAL -5 /* internal RPM error */
555 #define RPMERR_DBCORRUPT -6 /* rpm database is corrupt */
556 #define RPMERR_OLDDBCORRUPT -7 /* old style rpm database is corrupt */
557 #define RPMERR_OLDDBMISSING -8 /* old style rpm database is missing */
558 #define RPMERR_NOCREATEDB -9 /* cannot create new database */
559 #define RPMERR_DBOPEN -10 /* database open failed */
560 #define RPMERR_DBGETINDEX -11 /* database get from index failed */
561 #define RPMERR_DBPUTINDEX -12 /* database get from index failed */
562 #define RPMERR_NEWPACKAGE -13 /* package is too new to handle */
563 #define RPMERR_BADMAGIC -14 /* bad magic for an RPM */
564 #define RPMERR_RENAME -15 /* rename(2) failed */
565 #define RPMERR_UNLINK -16 /* unlink(2) failed */
566 #define RPMERR_RMDIR -17 /* rmdir(2) failed */
567 #define RPMERR_PKGINSTALLED -18 /* package already installed */
568 #define RPMERR_CHOWN -19 /* chown() call failed */
569 #define RPMERR_NOUSER -20 /* user does not exist */
570 #define RPMERR_NOGROUP -21 /* group does not exist */
571 #define RPMERR_MKDIR -22 /* mkdir() call failed */
572 #define RPMERR_FILECONFLICT -23 /* file being installed exists */
573 #define RPMERR_RPMRC -24 /* bad line in rpmrc */
574 #define RPMERR_NOSPEC -25 /* .spec file is missing */
575 #define RPMERR_NOTSRPM -26 /* a source rpm was expected */
576 #define RPMERR_FLOCK -27 /* locking the database failed */
577 #define RPMERR_OLDPACKAGE -28 /* trying upgrading to old version */
578 /*#define RPMERR_BADARCH -29 bad architecture or arch mismatch */
579 #define RPMERR_CREATE -30 /* failed to create a file */
580 #define RPMERR_NOSPACE -31 /* out of disk space */
581 #define RPMERR_NORELOCATE -32 /* tried to do improper relocatation */
582 /*#define RPMERR_BADOS -33 bad architecture or arch mismatch */
583 #define RPMMESS_BACKUP -34 /* backup made during [un]install */
584 #define RPMERR_MTAB -35 /* failed to read mount table */
585 #define RPMERR_STAT -36 /* failed to stat something */
586 #define RPMERR_BADDEV -37 /* file on device not listed in mtab */
587 #define RPMMESS_ALTNAME -38 /* file written as .rpmnew */
588 #define RPMMESS_PREREQLOOP -39 /* loop in prerequisites */
589 #define RPMERR_BADRELOCATE -40 /* bad relocation was specified */
590 #define RPMERR_OLDDB -41 /* old format database */
592 /* spec.c build.c pack.c */
593 #define RPMERR_UNMATCHEDIF -107 /* unclosed %ifarch or %ifos */
594 #define RPMERR_BADARG -109
595 #define RPMERR_SCRIPT -110 /* errors related to script exec */
596 #define RPMERR_READERROR -111
597 #define RPMERR_UNKNOWNOS -112
598 #define RPMERR_UNKNOWNARCH -113
599 #define RPMERR_EXEC -114
600 #define RPMERR_FORK -115
601 #define RPMERR_CPIO -116
602 #define RPMERR_GZIP -117
603 #define RPMERR_BADSPEC -118
604 #define RPMERR_LDD -119 /* couldn't understand ldd output */
605 #define RPMERR_BADFILENAME -120
607 #define RPMERR_BADSIGTYPE -200 /* Unknown signature type */
608 #define RPMERR_SIGGEN -201 /* Error generating signature */
612 /**************************************************/
616 /* These go in the sig Header to specify */
617 /* individual signature types. */
619 /**************************************************/
621 #define RPMSIGTAG_SIZE 1000
622 /* the md5 sum was broken *twice* on big endian machines */
623 #define RPMSIGTAG_LEMD5_1 1001
624 #define RPMSIGTAG_PGP 1002
625 #define RPMSIGTAG_LEMD5_2 1003
626 #define RPMSIGTAG_MD5 1004
627 #define RPMSIGTAG_GPG 1005
628 #define RPMSIGTAG_PGP5 1006 /* XXX legacy use only */
630 /* Signature tags by Public Key Algorithm (RFC 2440) */
631 /* N.B.: These tags are tenative, the values may change */
632 #define RPMTAG_PK_BASE 2048
633 #define RPMTAG_PK_RSA_ES RPMTAG_PK_BASE+1
634 #define RPMTAG_PK_RSA_E RPMTAG_PK_BASE+2
635 #define RPMTAG_PK_RSA_S RPMTAG_PK_BASE+3
636 #define RPMTAG_PK_ELGAMAL_E RPMTAG_PK_BASE+16
637 #define RPMTAG_PK_DSA RPMTAG_PK_BASE+17
638 #define RPMTAG_PK_ELLIPTIC RPMTAG_PK_BASE+18
639 #define RPMTAG_PK_ECDSA RPMTAG_PK_BASE+19
640 #define RPMTAG_PK_ELGAMAL_ES RPMTAG_PK_BASE+20
641 #define RPMTAG_PK_DH RPMTAG_PK_BASE+21
643 #define RPMTAG_HASH_BASE 2048+64
644 #define RPMTAG_HASH_MD5 RPMTAG_HASH_BASE+1
645 #define RPMTAG_HASH_SHA1 RPMTAG_HASH_BASE+2
646 #define RPMTAG_HASH_RIPEMD160 RPMTAG_HASH_BASE+3
647 #define RPMTAG_HASH_MD2 RPMTAG_HASH_BASE+5
648 #define RPMTAG_HASH_TIGER192 RPMTAG_HASH_BASE+6
649 #define RPMTAG_HASH_HAVAL_5_160 RPMTAG_HASH_BASE+7
651 /**************************************************/
653 /* verifySignature() results */
655 /**************************************************/
657 /* verifySignature() results */
659 #define RPMSIG_UNKNOWN 1
661 #define RPMSIG_NOKEY 3 /* Do not have the key to check this signature */
662 #define RPMSIG_NOTTRUSTED 4 /* We have the key but it is not trusted */
664 void rpmFreeSignature(Header h);
666 int rpmVerifySignature(const char *file, int_32 sigTag, void *sig, int count,
669 void freeFilesystems(void);
670 int rpmGetFilesystemList( /*@out@*/ const char *** listptr, /*@out@*/int * num);
671 int rpmGetFilesystemUsage(const char ** filelist, int_32 * fssizes,
672 int numFiles, /*@out@*/ uint_32 ** usagesPtr, int flags);
674 /* ==================================================================== */
675 /* --- query/verify */
677 /* XXX SPECFILE is not verify sources */
678 enum rpmQVSources { RPMQV_PACKAGE = 0, RPMQV_PATH, RPMQV_ALL, RPMQV_RPM,
679 RPMQV_GROUP, RPMQV_WHATPROVIDES, RPMQV_WHATREQUIRES,
680 RPMQV_TRIGGEREDBY, RPMQV_DBOFFSET, RPMQV_SPECFILE };
682 extern struct poptOption rpmQVSourcePoptTable[];
684 struct rpmQVArguments {
685 enum rpmQVSources qva_source;
686 int qva_sourceCount; /* > 1 is an error */
689 const char *qva_queryFormat;
690 const char *qva_prefix;
692 typedef struct rpmQVArguments QVA_t;
694 typedef int (*QVF_t) (QVA_t *qva, rpmdb db, Header h);
695 int showMatches(QVA_t *qva, rpmdb db, dbiIndexSet matches, QVF_t showPackage);
697 #define QUERY_FOR_LIST (1 << 1)
698 #define QUERY_FOR_STATE (1 << 2)
699 #define QUERY_FOR_DOCS (1 << 3)
700 #define QUERY_FOR_CONFIG (1 << 4)
701 #define QUERY_FOR_DUMPFILES (1 << 8)
703 /*@observer@*/ const char *const tagName(int tag);
705 extern char * i18ndomains;
706 extern struct poptOption rpmQueryPoptTable[];
708 void rpmDisplayQueryTags(FILE * f);
709 int rpmQueryVerify(QVA_t *qva, enum rpmQVSources source, const char * arg,
710 rpmdb db, QVF_t showPackage);
712 int showQueryPackage(QVA_t *qva, rpmdb db, Header h);
713 int rpmQuery(QVA_t *qva, enum rpmQVSources source, const char * arg);
715 #define VERIFY_FILES (1 << 9)
716 #define VERIFY_DEPS (1 << 10)
717 #define VERIFY_SCRIPT (1 << 11)
718 #define VERIFY_MD5 (1 << 12)
720 extern struct poptOption rpmVerifyPoptTable[];
722 int showVerifyPackage(QVA_t *qva, /*@only@*/ rpmdb db, Header h);
723 int rpmVerify(QVA_t *qva, enum rpmQVSources source, const char *arg);
725 /* ==================================================================== */
726 /* --- install/upgrade/erase */
728 #define INSTALL_PERCENT (1 << 0)
729 #define INSTALL_HASH (1 << 1)
730 #define INSTALL_NODEPS (1 << 2)
731 #define INSTALL_NOORDER (1 << 3)
732 #define INSTALL_LABEL (1 << 4) /* set if we're being verbose */
733 #define INSTALL_UPGRADE (1 << 5)
735 #define UNINSTALL_NODEPS (1 << 0)
736 #define UNINSTALL_ALLMATCHES (1 << 1)
738 int rpmInstall(const char * rootdir, const char ** argv, int installFlags,
739 int interfaceFlags, int probFilter, rpmRelocation * relocations);
740 int rpmInstallSource(const char * prefix, const char * arg, const char ** specFile,
742 int rpmErase(const char * rootdir, const char ** argv, int uninstallFlags,
745 /* ==================================================================== */
746 /* --- checksig/resign */
748 #define CHECKSIG_PGP (1 << 0)
749 #define CHECKSIG_MD5 (1 << 1)
750 #define CHECKSIG_GPG (1 << 2)
752 int rpmCheckSig(int flags, const char **argv);
753 int rpmReSign(int add, char *passPhrase, const char **argv);
755 #define ADD_SIGNATURE 1
756 #define NEW_SIGNATURE 0
762 #endif /* H_RPMLIB */