4 /* This is the *only* module users of rpmlib should need to include */
8 /* it shouldn't need these :-( */
12 int rpmReadPackageInfo(int fd, Header * signatures, Header * hdr);
13 int rpmReadPackageHeader(int fd, Header * hdr, int * isSource, int * major,
19 extern const struct headerTagTableEntry rpmTagTable[];
20 extern const int rpmTagTableSize;
22 /* this chains to headerDefaultFormats[] */
23 extern const struct headerSprintfExtension rpmHeaderFormats[];
25 /* these tags are for both the database and packages */
26 /* none of these can be 0 !! */
28 #define RPMTAG_NAME 1000
29 #define RPMTAG_VERSION 1001
30 #define RPMTAG_RELEASE 1002
31 #define RPMTAG_SERIAL 1003
32 #define RPMTAG_SUMMARY 1004
33 #define RPMTAG_DESCRIPTION 1005
34 #define RPMTAG_BUILDTIME 1006
35 #define RPMTAG_BUILDHOST 1007
36 #define RPMTAG_INSTALLTIME 1008
37 #define RPMTAG_SIZE 1009
38 #define RPMTAG_DISTRIBUTION 1010
39 #define RPMTAG_VENDOR 1011
40 #define RPMTAG_GIF 1012
41 #define RPMTAG_XPM 1013
42 #define RPMTAG_COPYRIGHT 1014
43 #define RPMTAG_PACKAGER 1015
44 #define RPMTAG_GROUP 1016
45 #define RPMTAG_CHANGELOG 1017 /* internal */
46 #define RPMTAG_SOURCE 1018
47 #define RPMTAG_PATCH 1019
48 #define RPMTAG_URL 1020
49 #define RPMTAG_OS 1021
50 #define RPMTAG_ARCH 1022
51 #define RPMTAG_PREIN 1023
52 #define RPMTAG_POSTIN 1024
53 #define RPMTAG_PREUN 1025
54 #define RPMTAG_POSTUN 1026
55 #define RPMTAG_FILENAMES 1027
56 #define RPMTAG_FILESIZES 1028
57 #define RPMTAG_FILESTATES 1029
58 #define RPMTAG_FILEMODES 1030
59 #define RPMTAG_FILEUIDS 1031 /* internal */
60 #define RPMTAG_FILEGIDS 1032 /* internal */
61 #define RPMTAG_FILERDEVS 1033
62 #define RPMTAG_FILEMTIMES 1034
63 #define RPMTAG_FILEMD5S 1035
64 #define RPMTAG_FILELINKTOS 1036
65 #define RPMTAG_FILEFLAGS 1037
66 #define RPMTAG_ROOT 1038
67 #define RPMTAG_FILEUSERNAME 1039
68 #define RPMTAG_FILEGROUPNAME 1040
69 #define RPMTAG_EXCLUDE 1041 /* not used - internal */
70 #define RPMTAG_EXCLUSIVE 1042 /* not used - internal */
71 #define RPMTAG_ICON 1043
72 #define RPMTAG_SOURCERPM 1044
73 #define RPMTAG_FILEVERIFYFLAGS 1045
74 #define RPMTAG_ARCHIVESIZE 1046
75 #define RPMTAG_PROVIDES 1047
76 #define RPMTAG_REQUIREFLAGS 1048
77 #define RPMTAG_REQUIRENAME 1049
78 #define RPMTAG_REQUIREVERSION 1050
79 #define RPMTAG_NOSOURCE 1051 /* internal */
80 #define RPMTAG_NOPATCH 1052 /* internal */
81 #define RPMTAG_CONFLICTFLAGS 1053
82 #define RPMTAG_CONFLICTNAME 1054
83 #define RPMTAG_CONFLICTVERSION 1055
84 #define RPMTAG_DEFAULTPREFIX 1056
85 #define RPMTAG_BUILDROOT 1057
86 #define RPMTAG_INSTALLPREFIX 1058
87 #define RPMTAG_EXCLUDEARCH 1059
88 #define RPMTAG_EXCLUDEOS 1060
89 #define RPMTAG_EXCLUSIVEARCH 1061
90 #define RPMTAG_EXCLUSIVEOS 1062
91 #define RPMTAG_AUTOREQPROV 1063 /* internal */
92 #define RPMTAG_RPMVERSION 1064
93 #define RPMTAG_TRIGGERSCRIPTS 1065 /* internal */
94 #define RPMTAG_TRIGGERNAME 1066 /* internal */
95 #define RPMTAG_TRIGGERVERSION 1067 /* internal */
96 #define RPMTAG_TRIGGERFLAGS 1068 /* internal */
97 #define RPMTAG_TRIGGERINDEX 1069 /* internal */
98 #define RPMTAG_VERIFYSCRIPT 1079
99 #define RPMTAG_CHANGELOGTIME 1080
100 #define RPMTAG_CHANGELOGNAME 1081
101 #define RPMTAG_CHANGELOGTEXT 1082
102 #define RPMTAG_BROKENMD5 1083 /* internal */
104 #define RPMTAG_EXTERNAL_TAG 1000000
106 #define RPMFILE_STATE_NORMAL 0
107 #define RPMFILE_STATE_REPLACED 1
108 #define RPMFILE_STATE_NOTINSTALLED 2
109 #define RPMFILE_STATE_NETSHARED 3
111 /* these can be ORed together */
112 #define RPMFILE_CONFIG (1 << 0)
113 #define RPMFILE_DOC (1 << 1)
114 #define RPMFILE_SPECFILE (1 << 2)
115 #define RPMFILE_MISSINGOK (1 << 3)
116 #define RPMFILE_NOREPLACE (1 << 4)
118 #define RPMINSTALL_REPLACEPKG (1 << 0)
119 #define RPMINSTALL_REPLACEFILES (1 << 1)
120 #define RPMINSTALL_TEST (1 << 2)
121 #define RPMINSTALL_UPGRADE (1 << 3)
122 #define RPMINSTALL_UPGRADETOOLD (1 << 4)
123 #define RPMINSTALL_NODOCS (1 << 5)
124 #define RPMINSTALL_NOSCRIPTS (1 << 6)
125 #define RPMINSTALL_NOARCH (1 << 7)
126 #define RPMINSTALL_NOOS (1 << 8)
128 #define RPMUNINSTALL_TEST (1 << 0)
129 #define RPMUNINSTALL_NOSCRIPTS (1 << 1)
131 #define RPMVERIFY_NONE 0
132 #define RPMVERIFY_MD5 (1 << 0)
133 #define RPMVERIFY_FILESIZE (1 << 1)
134 #define RPMVERIFY_LINKTO (1 << 2)
135 #define RPMVERIFY_USER (1 << 3)
136 #define RPMVERIFY_GROUP (1 << 4)
137 #define RPMVERIFY_MTIME (1 << 5)
138 #define RPMVERIFY_MODE (1 << 6)
139 #define RPMVERIFY_RDEV (1 << 7)
140 #define RPMVERIFY_ALL ~(RPMVERIFY_NONE)
142 #define RPMSENSE_ANY 0
143 #define RPMSENSE_SERIAL (1 << 0)
144 #define RPMSENSE_LESS (1 << 1)
145 #define RPMSENSE_GREATER (1 << 2)
146 #define RPMSENSE_EQUAL (1 << 3)
147 #define RPMSENSE_PROVIDES (1 << 4) /* only used internally by builds */
148 #define RPMSENSE_CONFLICTS (1 << 5) /* only used internally by builds */
149 #define RPMSENSE_SENSEMASK 15 /* Mask to get senses */
151 #define RPMSENSE_TRIGGER_IN (1 << 16)
152 #define RPMSENSE_TRIGGER_UN (1 << 17)
154 /* Stuff for maintaining "variables" like SOURCEDIR, BUILDDIR, etc */
156 #define RPMVAR_SOURCEDIR 0
157 #define RPMVAR_BUILDDIR 1
158 /* #define RPMVAR_DOCDIR 2 -- No longer used */
159 #define RPMVAR_OPTFLAGS 3
160 #define RPMVAR_TOPDIR 4
161 #define RPMVAR_SPECDIR 5
162 #define RPMVAR_ROOT 6
163 #define RPMVAR_RPMDIR 7
164 #define RPMVAR_SRPMDIR 8
165 /* #define RPMVAR_ARCHSENSITIVE 9 -- No longer used */
166 #define RPMVAR_REQUIREDISTRIBUTION 10
167 /* #define RPMVAR_REQUIREGROUP 11 -- No longer used */
168 #define RPMVAR_REQUIREVENDOR 12
169 #define RPMVAR_DISTRIBUTION 13
170 #define RPMVAR_VENDOR 14
171 #define RPMVAR_MESSAGELEVEL 15
172 #define RPMVAR_REQUIREICON 16
173 #define RPMVAR_TIMECHECK 17
174 #define RPMVAR_SIGTYPE 18
175 #define RPMVAR_PGP_PATH 19
176 #define RPMVAR_PGP_NAME 20
177 /* #define RPMVAR_PGP_SECRING 21 -- No longer used */
178 /* #define RPMVAR_PGP_PUBRING 22 -- No longer used */
179 #define RPMVAR_EXCLUDEDOCS 23
180 /* #define RPMVAR_BUILDARCH 24 -- No longer used */
181 /* #define RPMVAR_BUILDOS 25 -- No longer used */
182 #define RPMVAR_BUILDROOT 26
183 #define RPMVAR_DBPATH 27
184 #define RPMVAR_PACKAGER 28
185 #define RPMVAR_FTPPROXY 29
186 #define RPMVAR_TMPPATH 30
187 #define RPMVAR_CPIOBIN 31
188 #define RPMVAR_FTPPORT 32
189 #define RPMVAR_NETSHAREDPATH 33
190 #define RPMVAR_DEFAULTDOCDIR 34
191 #define RPMVAR_FIXPERMS 35
192 #define RPMVAR_GZIPBIN 36
193 #define RPMVAR_RPMFILENAME 37
194 #define RPMVAR_LASTVAR 38 /* IMPORTANT to keep right! */
196 char *rpmGetVar(int var);
197 int rpmGetBooleanVar(int var);
198 void rpmSetVar(int var, char *val);
202 int rpmReadConfigFiles(char * file, char * arch, char * os, int building);
203 int rpmGetOsNum(void);
204 int rpmGetArchNum(void);
205 char *rpmGetOsName(void);
206 char *rpmGetArchName(void);
207 int rpmShowRC(FILE *f);
208 int rpmArchScore(char * arch);
209 int rpmOsScore(char * os);
213 typedef struct rpmdb * rpmdb;
215 typedef void (*rpmNotifyFunction)(const unsigned long amount,
216 const unsigned long total);
218 int rpmdbOpen (char * root, rpmdb * dbp, int mode, int perms);
220 int rpmdbInit(char * root, int perms);
221 /* nonzero on error */
222 void rpmdbClose (rpmdb db);
224 int rpmdbFirstRecNum(rpmdb db);
225 int rpmdbNextRecNum(rpmdb db, unsigned int lastOffset);
226 /* 0 at end, -1 on error */
228 Header rpmdbGetRecord(rpmdb db, unsigned int offset);
229 int rpmdbFindByFile(rpmdb db, char * filespec, dbiIndexSet * matches);
230 int rpmdbFindByGroup(rpmdb db, char * group, dbiIndexSet * matches);
231 int rpmdbFindPackage(rpmdb db, char * name, dbiIndexSet * matches);
232 int rpmdbFindByProvides(rpmdb db, char * provides, dbiIndexSet * matches);
233 int rpmdbFindByRequiredBy(rpmdb db, char * requires, dbiIndexSet * matches);
234 int rpmdbFindByConflicts(rpmdb db, char * conflicts, dbiIndexSet * matches);
236 /* these are just convience functions */
237 int rpmdbFindByLabel(rpmdb db, char * label, dbiIndexSet * matches);
238 int rpmdbFindByHeader(rpmdb db, Header h, dbiIndexSet * matches);
240 int rpmInstallSourcePackage(char * root, int fd, char ** specFile,
241 rpmNotifyFunction notify, char * labelFormat);
242 int rpmInstallPackage(char * rootdir, rpmdb db, int fd, char * prefix,
243 int flags, rpmNotifyFunction notify, char * labelFormat,
244 char * netsharedPath);
245 int rpmVersionCompare(Header first, Header second);
246 int rpmRemovePackage(char * root, rpmdb db, unsigned int offset, int flags);
247 int rpmdbRebuild(char * root);
249 int rpmVerifyFile(char * root, Header h, int filenum, int * result,
251 int rpmVerifyScript(char * root, Header h, int err);
253 typedef struct rpmDependencyCheck * rpmDependencies;
255 struct rpmDependencyConflict {
256 char * byName, * byVersion, * byRelease;
257 /* these needs fields are misnamed -- they are used for the package
258 which isn't needed as well */
259 char * needsName, * needsVersion;
261 void * suggestedPackage; /* NULL if none */
262 enum { RPMDEP_SENSE_REQUIRES, RPMDEP_SENSE_CONFLICTS } sense;
265 rpmDependencies rpmdepDependencies(rpmdb db); /* db may be NULL */
266 void rpmdepAddPackage(rpmDependencies rpmdep, Header h);
267 void rpmdepAvailablePackage(rpmDependencies rpmdep, Header h, void * key);
268 void rpmdepUpgradePackage(rpmDependencies rpmdep, Header h);
269 void rpmdepRemovePackage(rpmDependencies rpmdep, int dboffset);
270 int rpmdepCheck(rpmDependencies rpmdep,
271 struct rpmDependencyConflict ** conflicts, int * numConflicts);
272 void rpmdepDone(rpmDependencies rpmdep);
273 void rpmdepFreeConflicts(struct rpmDependencyConflict * conflicts, int
278 #define RPMMESS_DEBUG 1
279 #define RPMMESS_VERBOSE 2
280 #define RPMMESS_NORMAL 3
281 #define RPMMESS_WARNING 4
282 #define RPMMESS_ERROR 5
283 #define RPMMESS_FATALERROR 6
285 #define RPMMESS_QUIET (RPMMESS_NORMAL + 1)
287 void rpmIncreaseVerbosity(void);
288 void rpmSetVerbosity(int level);
289 int rpmGetVerbosity(void);
290 int rpmIsVerbose(void);
291 int rpmIsDebug(void);
295 #define RPMLEAD_BINARY 0
296 #define RPMLEAD_SOURCE 1
298 #define RPMLEAD_MAGIC0 0xed
299 #define RPMLEAD_MAGIC1 0xab
300 #define RPMLEAD_MAGIC2 0xee
301 #define RPMLEAD_MAGIC3 0xdb
303 /* The lead needs to be 8 byte aligned */
305 #define RPMLEAD_SIZE 96
308 unsigned char magic[4];
309 unsigned char major, minor;
314 short signature_type;
315 char reserved[16]; /* pads to 96 bytes -- 8 byte aligned! */
318 struct oldrpmlead { /* for version 1 packages */
319 unsigned char magic[4];
320 unsigned char major, minor;
324 unsigned int specOffset;
325 unsigned int specLength;
326 unsigned int archiveOffset;
331 typedef void (*rpmErrorCallBackType)(void);
333 void rpmError(int code, char * format, ...);
334 int rpmErrorCode(void);
335 char *rpmErrorString(void);
336 rpmErrorCallBackType rpmErrorSetCallback(rpmErrorCallBackType);
338 #define RPMERR_GDBMOPEN -2 /* gdbm open failed */
339 #define RPMERR_GDBMREAD -3 /* gdbm read failed */
340 #define RPMERR_GDBMWRITE -4 /* gdbm write failed */
341 #define RPMERR_INTERNAL -5 /* internal RPM error */
342 #define RPMERR_DBCORRUPT -6 /* rpm database is corrupt */
343 #define RPMERR_OLDDBCORRUPT -7 /* old style rpm database is corrupt */
344 #define RPMERR_OLDDBMISSING -8 /* old style rpm database is missing */
345 #define RPMERR_NOCREATEDB -9 /* cannot create new database */
346 #define RPMERR_DBOPEN -10 /* database open failed */
347 #define RPMERR_DBGETINDEX -11 /* database get from index failed */
348 #define RPMERR_DBPUTINDEX -12 /* database get from index failed */
349 #define RPMERR_NEWPACKAGE -13 /* package is too new to handle */
350 #define RPMERR_BADMAGIC -14 /* bad magic for an RPM */
351 #define RPMERR_RENAME -15 /* rename(2) failed */
352 #define RPMERR_UNLINK -16 /* unlink(2) failed */
353 #define RPMERR_RMDIR -17 /* rmdir(2) failed */
354 #define RPMERR_PKGINSTALLED -18 /* package already installed */
355 #define RPMERR_CHOWN -19 /* chown() call failed */
356 #define RPMERR_NOUSER -20 /* user does not exist */
357 #define RPMERR_NOGROUP -21 /* group does not exist */
358 #define RPMERR_MKDIR -22 /* mkdir() call failed */
359 #define RPMERR_FILECONFLICT -23 /* file being installed exists */
360 #define RPMERR_RPMRC -24 /* bad line in rpmrc */
361 #define RPMERR_NOSPEC -25 /* .spec file is missing */
362 #define RPMERR_NOTSRPM -26 /* a source rpm was expected */
363 #define RPMERR_FLOCK -27 /* locking the database failed */
364 #define RPMERR_OLDPACKAGE -28 /* trying upgrading to old version */
365 #define RPMERR_BADARCH -29 /* bad architecture or arch mismatch */
366 #define RPMERR_CREATE -30 /* failed to create a file */
367 #define RPMERR_NOSPACE -31 /* out of disk space */
368 #define RPMERR_NORELOCATE -32 /* tried to relocate improper package */
369 #define RPMERR_BADOS -33 /* bad architecture or arch mismatch */
370 #define RPMMESS_BACKUP -34 /* backup made during [un]install */
371 #define RPMERR_MTAB -35 /* failed to read mount table */
372 #define RPMERR_STAT -36 /* failed to stat something */
373 #define RPMERR_BADDEV -37 /* file on device not listed in mtab */
375 /* spec.c build.c pack.c */
376 #define RPMERR_UNMATCHEDIF -107 /* unclosed %ifarch or %ifos */
377 #define RPMERR_BADARG -109
378 #define RPMERR_SCRIPT -110 /* errors related to script exec */
379 #define RPMERR_READERROR -111
380 #define RPMERR_UNKNOWNOS -112
381 #define RPMERR_UNKNOWNARCH -113
382 #define RPMERR_EXEC -114
383 #define RPMERR_FORK -115
384 #define RPMERR_CPIO -116
385 #define RPMERR_GZIP -117
386 #define RPMERR_BADSPEC -118
387 #define RPMERR_LDD -119 /* couldn't understand ldd output */
388 #define RPMERR_BADFILENAME -120
390 #define RPMERR_BADSIGTYPE -200 /* Unknown signature type */
391 #define RPMERR_SIGGEN -201 /* Error generating signature */
395 /**************************************************/
399 /* These go in the sig Header to specify */
400 /* individual signature types. */
402 /**************************************************/
404 #define RPMSIGTAG_SIZE 1000
405 /* the md5 sum was broken *twice* on big endian machines */
406 #define RPMSIGTAG_LEMD5_1 1001
407 #define RPMSIGTAG_PGP 1002
408 #define RPMSIGTAG_LEMD5_2 1003
409 #define RPMSIGTAG_MD5 1004
411 /**************************************************/
413 /* verifySignature() results */
415 /**************************************************/
417 /* verifySignature() results */
419 #define RPMSIG_UNKNOWN 1
421 #define RPMSIG_NOKEY 3 /* Do not have the key to check this signature */
423 void rpmFreeSignature(Header h);
425 int rpmVerifySignature(char *file, int_32 sigTag, void *sig, int count,
428 int rpmGetFilesystemList(char *** listptr);
429 int rpmGetFilesystemUsage(char ** filelist, int_32 * fssizes, int numFiles,
430 uint_32 ** usagesPtr, int flags);