- add --with-efence to configure, check install/upgrade with efence.
[platform/upstream/rpm.git] / lib / rpmcli.h
1 #ifndef H_RPMCLI
2 #define H_RPMCLI
3
4 /** \ingroup rpmcli rpmbuild
5  * \file lib/rpmcli.h
6  */
7
8 #include "rpmlib.h"
9 #include "rpmurl.h"
10 #include "rpmmacro.h"
11
12 /** \ingroup rpmcli
13  * Should version 3 packages be produced?
14  */
15 /*@-redecl@*/
16 /*@unchecked@*/
17 extern int _noDirTokens;
18 /*@=redecl@*/
19
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23
24 /** \ingroup rpmcli
25  * Popt option table for options shared by all modes and executables.
26  */
27 /*@unchecked@*/
28 extern struct poptOption                rpmcliAllPoptTable[];
29
30 /*@unchecked@*/ /*@observer@*/ /*@null@*/
31 extern const char * rpmcliPipeOutput;
32
33 /*@unchecked@*/ /*@observer@*/ /*@null@*/
34 extern const char * rpmcliRcfile;
35
36 /*@unchecked@*/ /*@observer@*/ /*@null@*/
37 extern const char * rpmcliRootDir;
38
39 /**
40  * Initialize most everything needed by an rpm CLI executable context.
41  * @param argc                  no. of args
42  * @param argv                  arg array
43  * @param optionsTable          popt option table
44  * @return                      popt context (or NULL)
45  */
46 /*@null@*/
47 poptContext
48 rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable)
49         /*@globals rpmCLIMacroContext, rpmGlobalMacroContext, stderr, 
50                 fileSystem, internalState @*/
51         /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext, stderr, 
52                 fileSystem, internalState @*/;
53
54 /**
55  * Make sure that rpm configuration has been read.
56  * @warning Options like --rcfile and --verbose must precede callers option.
57  */
58 /*@mayexit@*/
59 void rpmcliConfigured(void)
60         /*@globals rpmCLIMacroContext, rpmGlobalMacroContext,
61                 fileSystem, internalState @*/
62         /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext,
63                 fileSystem, internalState @*/;
64
65 /**
66  * Destroy most everything needed by an rpm CLI executable context.
67  * @param optCon                popt context
68  * @return                      NULL always
69  */
70 poptContext
71 rpmcliFini(/*@only@*/ /*@null@*/ poptContext optCon)
72         /*@modifies optCon @*/;
73
74 /**
75  * Common/global popt tokens used for command line option tables.
76  */
77 #define RPMCLI_POPT_NODEPS              -1025
78 #define RPMCLI_POPT_FORCE               -1026
79 #define RPMCLI_POPT_NOMD5               -1027
80 #define RPMCLI_POPT_NOSCRIPTS           -1028
81 #define RPMCLI_POPT_NOSIGNATURE         -1029
82 #define RPMCLI_POPT_NODIGEST            -1030
83 #define RPMCLI_POPT_NOHDRCHK            -1031
84
85 /* ==================================================================== */
86 /** \name RPMQV */
87 /*@{*/
88
89 /** \ingroup rpmcli
90  * Query/Verify argument qualifiers.
91  * @todo Reassign to tag values.
92  */
93 typedef enum rpmQVSources_e {
94     RPMQV_PACKAGE = 0,  /*!< ... from package name db search. */
95     RPMQV_PATH,         /*!< ... from file path db search. */
96     RPMQV_ALL,          /*!< ... from each installed package. */
97     RPMQV_RPM,          /*!< ... from reading binary rpm package. */
98     RPMQV_GROUP,        /*!< ... from group db search. */
99     RPMQV_WHATPROVIDES, /*!< ... from provides db search. */
100     RPMQV_WHATREQUIRES, /*!< ... from requires db search. */
101     RPMQV_TRIGGEREDBY,  /*!< ... from trigger db search. */
102     RPMQV_DBOFFSET,     /*!< ... from database header instance. */
103     RPMQV_SPECFILE,     /*!< ... from spec file parse (query only). */
104     RPMQV_PKGID,        /*!< ... from package id (header+payload MD5). */
105     RPMQV_HDRID,        /*!< ... from header id (immutable header SHA1). */
106     RPMQV_FILEID,       /*!< ... from file id (file MD5). */
107     RPMQV_TID           /*!< ... from install transaction id (time stamp). */
108 } rpmQVSources;
109
110 /** \ingroup rpmcli
111  * Bit(s) for rpmVerifyFile() attributes and result.
112  */
113 typedef enum rpmVerifyAttrs_e {
114     RPMVERIFY_NONE      = 0,            /*!< */
115     RPMVERIFY_MD5       = (1 << 0),     /*!< from %verify(md5) */
116     RPMVERIFY_FILESIZE  = (1 << 1),     /*!< from %verify(size) */
117     RPMVERIFY_LINKTO    = (1 << 2),     /*!< from %verify(link) */
118     RPMVERIFY_USER      = (1 << 3),     /*!< from %verify(user) */
119     RPMVERIFY_GROUP     = (1 << 4),     /*!< from %verify(group) */
120     RPMVERIFY_MTIME     = (1 << 5),     /*!< from %verify(mtime) */
121     RPMVERIFY_MODE      = (1 << 6),     /*!< from %verify(mode) */
122     RPMVERIFY_RDEV      = (1 << 7),     /*!< from %verify(rdev) */
123         /* bits 8-15 unused, reserved for rpmVerifyAttrs */
124         /* bits 16-20 used in rpmVerifyFlags */
125         /* bits 21-22 unused */
126         /* bits 23-27 used in rpmQueryFlags */
127     RPMVERIFY_READLINKFAIL= (1 << 28),  /*!< */
128     RPMVERIFY_READFAIL  = (1 << 29),    /*!< */
129     RPMVERIFY_LSTATFAIL = (1 << 30)     /*!< */
130         /* bit 31 unused */
131 } rpmVerifyAttrs;
132 #define RPMVERIFY_ALL           ~(RPMVERIFY_NONE)
133
134 /** \ingroup rpmcli
135  * Bit(s) to control rpmQuery() operation, stored in qva_flags.
136  * @todo Merge rpmQueryFlags, rpmVerifyFlags, and rpmVerifyAttrs?.
137  */
138 typedef enum rpmQueryFlags_e {
139 /*@-enummemuse@*/
140     QUERY_FOR_DEFAULT   = 0,            /*!< */
141     QUERY_MD5           = (1 << 0),     /*!< from --nomd5 */
142     QUERY_SIZE          = (1 << 1),     /*!< from --nosize */
143     QUERY_LINKTO        = (1 << 2),     /*!< from --nolink */
144     QUERY_USER          = (1 << 3),     /*!< from --nouser) */
145     QUERY_GROUP         = (1 << 4),     /*!< from --nogroup) */
146     QUERY_MTIME         = (1 << 5),     /*!< from --nomtime) */
147     QUERY_MODE          = (1 << 6),     /*!< from --nomode) */
148     QUERY_RDEV          = (1 << 7),     /*!< from --nodev */
149         /* bits 8-15 unused, reserved for rpmVerifyAttrs */
150     QUERY_FILES         = (1 << 16),    /*!< verify: from --nofiles */
151     QUERY_DEPS          = (1 << 17),    /*!< verify: from --nodeps */
152     QUERY_SCRIPT        = (1 << 18),    /*!< verify: from --noscripts */
153     QUERY_DIGEST        = (1 << 19),    /*!< verify: from --nodigest */
154     QUERY_SIGNATURE     = (1 << 20),    /*!< verify: from --nosignature */
155     QUERY_PATCHES       = (1 << 21),    /*!< placeholder (SuSE) */
156     QUERY_HDRCHK        = (1 << 22),    /*!< verify: from --nohdrchk */
157 /*@=enummemuse@*/
158     QUERY_FOR_LIST      = (1 << 23),    /*!< query:  from --list */
159     QUERY_FOR_STATE     = (1 << 24),    /*!< query:  from --state */
160     QUERY_FOR_DOCS      = (1 << 25),    /*!< query:  from --docfiles */
161     QUERY_FOR_CONFIG    = (1 << 26),    /*!< query:  from --configfiles */
162     QUERY_FOR_DUMPFILES = (1 << 27)     /*!< query:  from --dump */
163 } rpmQueryFlags;
164
165 #define _QUERY_FOR_BITS \
166    (QUERY_FOR_LIST|QUERY_FOR_STATE|QUERY_FOR_DOCS|QUERY_FOR_CONFIG|\
167     QUERY_FOR_DUMPFILES)
168
169 /** \ingroup rpmcli
170  * Bit(s) from common command line options.
171  */
172 /*@unchecked@*/
173 extern rpmQueryFlags rpmcliQueryFlags;
174
175 /** \ingroup rpmcli
176  * Bit(s) to control rpmVerify() operation, stored in qva_flags.
177  * @todo Merge rpmQueryFlags, rpmVerifyFlags, and rpmVerifyAttrs values?.
178  */
179 typedef enum rpmVerifyFlags_e {
180 /*@-enummemuse@*/
181     VERIFY_DEFAULT      = 0,            /*!< */
182 /*@=enummemuse@*/
183     VERIFY_MD5          = (1 << 0),     /*!< from --nomd5 */
184     VERIFY_SIZE         = (1 << 1),     /*!< from --nosize */
185     VERIFY_LINKTO       = (1 << 2),     /*!< from --nolinkto */
186     VERIFY_USER         = (1 << 3),     /*!< from --nouser */
187     VERIFY_GROUP        = (1 << 4),     /*!< from --nogroup */
188     VERIFY_MTIME        = (1 << 5),     /*!< from --nomtime */
189     VERIFY_MODE         = (1 << 6),     /*!< from --nomode */
190     VERIFY_RDEV         = (1 << 7),     /*!< from --nodev */
191         /* bits 8-15 unused, reserved for rpmVerifyAttrs */
192     VERIFY_FILES        = (1 << 16),    /*!< verify: from --nofiles */
193     VERIFY_DEPS         = (1 << 17),    /*!< verify: from --nodeps */
194     VERIFY_SCRIPT       = (1 << 18),    /*!< verify: from --noscripts */
195     VERIFY_DIGEST       = (1 << 19),    /*!< verify: from --nodigest */
196     VERIFY_SIGNATURE    = (1 << 20),    /*!< verify: from --nosignature */
197     VERIFY_PATCHES      = (1 << 21),    /*!< placeholder (SuSE) */
198     VERIFY_HDRCHK       = (1 << 22),    /*!< verify: from --nohdrchk */
199 /*@-enummemuse@*/
200     VERIFY_FOR_LIST     = (1 << 23),    /*!< query:  from --list */
201     VERIFY_FOR_STATE    = (1 << 24),    /*!< query:  from --state */
202     VERIFY_FOR_DOCS     = (1 << 25),    /*!< query:  from --docfiles */
203     VERIFY_FOR_CONFIG   = (1 << 26),    /*!< query:  from --configfiles */
204     VERIFY_FOR_DUMPFILES= (1 << 27)     /*!< query:  from --dump */
205 /*@=enummemuse@*/
206         /* bits 28-30 used in rpmVerifyAttrs */
207 } rpmVerifyFlags;
208
209 #define VERIFY_ATTRS    \
210   ( VERIFY_MD5 | VERIFY_SIZE | VERIFY_LINKTO | VERIFY_USER | VERIFY_GROUP | \
211     VERIFY_MTIME | VERIFY_MODE | VERIFY_RDEV )
212 #define VERIFY_ALL      \
213   ( VERIFY_ATTRS | VERIFY_FILES | VERIFY_DEPS | VERIFY_SCRIPT | VERIFY_DIGEST |\
214     VERIFY_SIGNATURE | VERIFY_HDRCHK )
215
216 /** \ingroup rpmcli
217  */
218 typedef struct rpmQVKArguments_s * QVA_t;
219
220 /** \ingroup rpmcli
221  * Function to display iterator matches.
222  *
223  * @param qva           parsed query/verify options
224  * @param ts            transaction set
225  * @param h             header to use for query/verify
226  */
227 typedef int (*QVF_t) (QVA_t qva, rpmts ts, Header h)
228         /*@globals fileSystem@*/
229         /*@modifies qva, ts, fileSystem @*/;
230
231 /** \ingroup rpmcli
232  * Describe query/verify/signature command line operation.
233  */
234 struct rpmQVKArguments_s {
235     rpmQVSources qva_source;    /*!< Identify CLI arg type. */
236     int         qva_sourceCount;/*!< Exclusive option check (>1 is error). */
237     rpmQueryFlags qva_flags;    /*!< Bit(s) to control operation. */
238     rpmfileAttrs qva_fflags;    /*!< Bit(s) to filter on attribute. */
239 /*@only@*/ /*@null@*/
240     rpmdbMatchIterator qva_mi;  /*!< Match iterator on selected headers. */
241 /*@null@*/
242     QVF_t qva_showPackage;      /*!< Function to display iterator matches. */
243 /*@unused@*/
244     int qva_verbose;            /*!< (unused) */
245 /*@only@*/ /*@null@*/
246     const char * qva_queryFormat;/*!< Format for headerSprintf(). */
247     int sign;                   /*!< Is a passphrase needed? */
248 /*@observer@*/
249     const char * passPhrase;    /*!< Pass phrase. */
250 /*@observer@*/ /*@null@*/
251     const char * qva_prefix;    /*!< Path to top of install tree. */
252     char        qva_mode;
253                 /*!<
254                 - 'q'   from --query, -q
255                 - 'Q'   from --querytags
256                 - 'V'   from --verify, -V
257                 - 'A'   from --addsign
258                 - 'I'   from --import
259                 - 'K'   from --checksig, -K
260                 - 'R'   from --resign
261                 */
262     char        qva_char;       /*!< (unused) always ' ' */
263 };
264
265 /** \ingroup rpmcli
266  */
267 /*@unchecked@*/
268 extern struct rpmQVKArguments_s rpmQVKArgs;
269
270 /** \ingroup rpmcli
271  */
272 /*@unchecked@*/
273 extern struct poptOption rpmQVSourcePoptTable[];
274
275 /** \ingroup rpmcli
276  */
277 /*@unchecked@*/
278 extern int specedit;
279
280 /** \ingroup rpmcli
281  */
282 /*@unchecked@*/
283 extern struct poptOption rpmQueryPoptTable[];
284
285 /** \ingroup rpmcli
286  */
287 /*@unchecked@*/
288 extern struct poptOption rpmVerifyPoptTable[];
289
290 /** \ingroup rpmcli
291  * Display query/verify information for each header in iterator.
292  *
293  * This routine uses:
294  *      - qva->qva_mi           rpm database iterator
295  *      - qva->qva_showPackage  query/verify display routine
296  *
297  * @param qva           parsed query/verify options
298  * @param ts            transaction set
299  * @return              result of last non-zero showPackage() return
300  */
301 int rpmcliShowMatches(QVA_t qva, rpmts ts)
302         /*@globals rpmGlobalMacroContext, fileSystem@*/
303         /*@modifies qva, rpmGlobalMacroContext, fileSystem @*/;
304
305 /** \ingroup rpmcli
306  * Display list of tags that can be used in --queryformat.
307  * @param fp    file handle to use for display
308  */
309 void rpmDisplayQueryTags(FILE * fp)
310         /*@globals fileSystem@*/
311         /*@modifies *fp, fileSystem @*/;
312
313 /** \ingroup rpmcli
314  * Common query/verify source interface, called once for each CLI arg.
315  *
316  * This routine uses:
317  *      - qva->qva_mi           rpm database iterator
318  *      - qva->qva_showPackage  query/verify display routine
319  *
320  * @param qva           parsed query/verify options
321  * @param ts            transaction set
322  * @param arg           name of source to query/verify
323  * @return              showPackage() result, 1 if rpmdbInitIterator() is NULL
324  */
325 int rpmQueryVerify(QVA_t qva, rpmts ts, const char * arg)
326         /*@globals rpmGlobalMacroContext,
327                 fileSystem, internalState @*/
328         /*@modifies qva, ts, rpmGlobalMacroContext,
329                 fileSystem, internalState @*/;
330
331 /** \ingroup rpmcli
332  * Display results of package query.
333  * @todo Devise a meaningful return code.
334  * @param qva           parsed query/verify options
335  * @param ts            transaction set
336  * @param h             header to use for query
337  * @return              0 always
338  */
339 int showQueryPackage(QVA_t qva, rpmts ts, Header h)
340         /*@globals fileSystem, internalState @*/
341         /*@modifies ts, h, fileSystem, internalState @*/;
342
343 /** \ingroup rpmcli
344  * Display package information.
345  * @todo hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union?
346  * @param ts            transaction set
347  * @param qva           parsed query/verify options
348  * @param argv          query argument(s) (or NULL)
349  * @return              0 on success, else no. of failures
350  */
351 int rpmcliQuery(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
352         /*@globals rpmGlobalMacroContext,
353                 fileSystem, internalState @*/
354         /*@modifies ts, qva, rpmGlobalMacroContext,
355                 fileSystem, internalState @*/;
356
357 /** \ingroup rpmcli
358  * Verify file attributes (including MD5 sum).
359  * @todo gnorpm and python bindings prevent this from being static.
360  * @param ts            transaction set
361  * @param fi            file info (with linked header and current file index)
362  * @retval res          address of bit(s) returned to indicate failure
363  * @param omitMask      bit(s) to disable verify checks
364  * @return              0 on success (or not installed), 1 on error
365  */
366 /*@-incondefs@*/
367 int rpmVerifyFile(const rpmts ts, rpmfi fi,
368                 /*@out@*/ rpmVerifyAttrs * res, rpmVerifyAttrs omitMask)
369         /*@globals fileSystem, internalState @*/
370         /*@modifies fi, *res, fileSystem, internalState @*/
371         /*@requires maxSet(res) >= 0 @*/;
372 /*@=incondefs@*/
373
374 /** \ingroup rpmcli
375  * Display results of package verify.
376  * @param qva           parsed query/verify options
377  * @param ts            transaction set
378  * @param h             header to use for verify
379  * @return              result of last non-zero verify return
380  */
381 int showVerifyPackage(QVA_t qva, rpmts ts, Header h)
382         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
383         /*@modifies ts, h, rpmGlobalMacroContext, fileSystem, internalState @*/;
384
385 /**
386  * Check package and header signatures.
387  * @param qva           parsed query/verify options
388  * @param ts            transaction set
389  * @param fd            package file handle
390  * @param fn            package file name
391  * @return              0 on success, 1 on failure
392  */
393 int rpmVerifySignatures(QVA_t qva, rpmts ts, FD_t fd, const char * fn)
394         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
395         /*@modifies qva, ts, fd, rpmGlobalMacroContext,
396                 fileSystem, internalState @*/;
397
398 /** \ingroup rpmcli
399  * Verify package install.
400  * @todo hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union?
401  * @param ts            transaction set
402  * @param qva           parsed query/verify options
403  * @param argv          verify argument(s) (or NULL)
404  * @return              0 on success, else no. of failures
405  */
406 int rpmcliVerify(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
407         /*@globals rpmGlobalMacroContext,
408                 fileSystem, internalState @*/
409         /*@modifies ts, qva, rpmGlobalMacroContext,
410                 fileSystem, internalState @*/;
411
412 /*@}*/
413 /* ==================================================================== */
414 /** \name RPMBT */
415 /*@{*/
416
417 /** \ingroup rpmcli
418  * Describe build command line request.
419  */
420 struct rpmBuildArguments_s {
421     rpmQueryFlags qva_flags;    /*!< Bit(s) to control verification. */
422     int buildAmount;            /*!< Bit(s) to control operation. */
423 /*@null@*/
424     const char * buildRootOverride; /*!< from --buildroot */
425 /*@null@*/
426     char * targets;             /*!< Target platform(s), comma separated. */
427 /*@observer@*/
428     const char * passPhrase;    /*!< Pass phrase. */
429 /*@only@*/ /*@null@*/
430     const char * cookie;        /*!< NULL for binary, ??? for source, rpm's */
431     int force;                  /*!< from --force */
432     int noBuild;                /*!< from --nobuild */
433     int noDeps;                 /*!< from --nodeps */
434     int noLang;                 /*!< from --nolang */
435     int shortCircuit;           /*!< from --short-circuit */
436     int sign;                   /*!< from --sign */
437     int useCatalog;             /*!< from --usecatalog */
438     char buildMode;             /*!< Build mode (one of "btBC") */
439     char buildChar;             /*!< Build stage (one of "abcilps ") */
440 /*@observer@*/ /*@null@*/
441     const char * rootdir;
442 };
443
444 /** \ingroup rpmcli
445  */
446 typedef struct rpmBuildArguments_s *    BTA_t;
447
448 /** \ingroup rpmcli
449  */
450 /*@unchecked@*/
451 extern struct rpmBuildArguments_s       rpmBTArgs;
452
453 /** \ingroup rpmcli
454  */
455 /*@unchecked@*/
456 extern struct poptOption                rpmBuildPoptTable[];
457
458 /*@}*/
459 /* ==================================================================== */
460 /** \name RPMEIU */
461 /*@{*/
462 /* --- install/upgrade/erase modes */
463
464 /*@unchecked@*/
465 extern int rpmcliPackagesTotal;
466 /*@unchecked@*/
467 extern int rpmcliHashesCurrent;
468 /*@unchecked@*/
469 extern int rpmcliHashesTotal;
470 /*@unchecked@*/
471 extern int rpmcliProgressCurrent;
472 /*@unchecked@*/
473 extern int rpmcliProgressTotal;
474
475 /** \ingroup rpmcli
476  * The rpm CLI generic transaction callback handler.
477  * @todo Remove headerSprintf() from the progress callback.
478  * @deprecated Transaction callback arguments need to change, so don't rely on
479  * this routine in the rpmcli API.
480  *
481  * @param arg           per-callback private data (e.g. an rpm header)
482  * @param what          callback identifier
483  * @param amount        per-callback progress info
484  * @param total         per-callback progress info
485  * @param key           opaque header key (e.g. file name or PyObject)
486  * @param data          private data (e.g. rpmInstallInterfaceFlags)
487  * @return              per-callback data (e.g. an opened FD_t)
488  */
489 /*@null@*/ void * rpmShowProgress(/*@null@*/ const void * arg,
490                 const rpmCallbackType what,
491                 const unsigned long amount,
492                 const unsigned long total,
493                 /*@null@*/ fnpyKey key,
494                 /*@null@*/ void * data)
495         /*@globals rpmcliHashesCurrent,
496                 rpmcliProgressCurrent, rpmcliProgressTotal,
497                 fileSystem, internalState @*/
498         /*@modifies rpmcliHashesCurrent,
499                 rpmcliProgressCurrent, rpmcliProgressTotal,
500                 fileSystem, internalState @*/;
501
502 /** \ingroup rpmcli
503  * Install source rpm package.
504  * @param ts            transaction set
505  * @param arg           source rpm file name
506  * @retval specFilePtr  address of (installed) spec file name
507  * @retval cookie
508  * @return              0 on success
509  */
510 int rpmInstallSource(rpmts ts, const char * arg,
511                 /*@null@*/ /*@out@*/ const char ** specFilePtr,
512                 /*@null@*/ /*@out@*/ const char ** cookie)
513         /*@globals rpmGlobalMacroContext,
514                 fileSystem, internalState@*/
515         /*@modifies ts, *specFilePtr, *cookie, rpmGlobalMacroContext,
516                 fileSystem, internalState @*/;
517
518 /** \ingroup rpmcli
519  * Describe database command line requests.
520  */
521 struct rpmInstallArguments_s {
522     rpmtransFlags transFlags;
523     rpmprobFilterFlags probFilter;
524     rpmInstallInterfaceFlags installInterfaceFlags;
525     rpmEraseInterfaceFlags eraseInterfaceFlags;
526     rpmQueryFlags qva_flags;    /*!< from --nodigest/--nosignature */
527     uint_32 rbtid;              /*!< from --rollback */
528     int numRelocations;
529     int noDeps;
530     int incldocs;
531 /*@owned@*/ /*@null@*/
532     rpmRelocation * relocations;
533 /*@null@*/
534     const char * prefix;
535 /*@observer@*/ /*@null@*/
536     const char * rootdir;
537 };
538
539 /** \ingroup rpmcli
540  * Install/upgrade/freshen binary rpm package.
541  * @param ts            transaction set
542  * @param ia            mode flags and parameters
543  * @param fileArgv      array of package file names (NULL terminated)
544  * @return              0 on success
545  */
546 int rpmInstall(rpmts ts, struct rpmInstallArguments_s * ia,
547                 /*@null@*/ const char ** fileArgv)
548         /*@globals rpmcliPackagesTotal, rpmGlobalMacroContext,
549                 fileSystem, internalState@*/
550         /*@modifies ts, ia, rpmcliPackagesTotal, rpmGlobalMacroContext,
551                 fileSystem, internalState @*/;
552
553 /** \ingroup rpmcli
554  * Erase binary rpm package.
555  * @param ts            transaction set
556  * @param ia            control args/bits
557  * @param argv          array of package file names (NULL terminated)
558  * @return              0 on success
559  */
560 int rpmErase(rpmts ts, const struct rpmInstallArguments_s * ia,
561                 /*@null@*/ const char ** argv)
562         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
563         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
564
565 /**
566  * A rollback transaction id element.
567  */
568 /*@-fielduse@*/
569 typedef /*@abstract@*/ struct IDT_s {
570     unsigned int instance;      /*!< installed package transaction id. */
571 /*@owned@*/ /*@null@*/
572     const char * key;           /*! removed package file name. */
573     Header h;                   /*!< removed package header. */
574     union {
575         uint_32 u32;            /*!< install/remove transaction id */
576     } val;
577 } * IDT;
578 /*@=fielduse@*/
579
580 /**
581  * A rollback transaction id index.
582  */
583 typedef /*@abstract@*/ struct IDTindex_s {
584     int delta;                  /*!< no. elements to realloc as a chunk. */
585     int size;                   /*!< size of id index element. */
586     int alloced;                /*!< current number of elements allocated. */
587     int nidt;                   /*!< current number of elements initialized. */
588 /*@only@*/ /*@null@*/
589     IDT idt;                    /*!< id index elements. */
590 } * IDTX;
591
592 /**
593  * Destroy id index.
594  * @param idtx          id index
595  * @return              NULL always
596  */
597 /*@null@*/
598 IDTX IDTXfree(/*@only@*/ /*@null@*/ IDTX idtx)
599         /*@modifies idtx @*/;
600
601 /**
602  * Create id index.
603  * @return              new id index
604  */
605 /*@only@*/
606 IDTX IDTXnew(void)
607         /*@*/;
608
609 /**
610  * Insure that index has room for "need" elements.
611  * @param idtx          id index
612  * @param need          additional no. of elements needed
613  * @return              id index (with room for "need" elements)
614  */
615 /*@only@*/ /*@null@*/
616 IDTX IDTXgrow(/*@only@*/ /*@null@*/ IDTX idtx, int need)
617         /*@modifies idtx @*/;
618
619 /**
620  * Sort tag (instance,value) pairs.
621  * @param idtx          id index
622  * @return              id index
623  */
624 /*@only@*/ /*@null@*/
625 IDTX IDTXsort(/*@only@*/ /*@null@*/ IDTX idtx)
626         /*@modifies idtx @*/;
627
628 /**
629  * Load tag (instance,value) pairs from rpm databse, and return sorted id index.
630  * @param ts            transaction set
631  * @param tag           rpm tag
632  * @return              id index
633  */
634 /*@only@*/ /*@null@*/
635 IDTX IDTXload(rpmts ts, rpmTag tag)
636         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
637         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState  @*/;
638
639 /**
640  * Load tag (instance,value) pairs from packages, and return sorted id index.
641  * @param ts            transaction set
642  * @param globstr       glob expression
643  * @param tag           rpm tag
644  * @return              id index
645  */
646 /*@only@*/ /*@null@*/
647 IDTX IDTXglob(rpmts ts, const char * globstr, rpmTag tag)
648         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
649         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
650
651 /** \ingroup rpmcli
652  * Rollback transactions, erasing new, reinstalling old, package(s).
653  * @param ts            transaction set
654  * @param ia            mode flags and parameters
655  * @param argv          array of arguments (NULL terminated)
656  * @return              0 on success
657  */
658 int rpmRollback(rpmts ts, struct rpmInstallArguments_s * ia,
659                 /*@null@*/ const char ** argv)
660         /*@globals rpmcliPackagesTotal, rpmGlobalMacroContext,
661                 fileSystem, internalState @*/
662         /*@modifies ts, ia, rpmcliPackagesTotal, rpmGlobalMacroContext,
663                 fileSystem, internalState @*/;
664
665 /** \ingroup rpmcli
666  */
667 /*@unchecked@*/
668 extern struct rpmInstallArguments_s rpmIArgs;
669
670 /** \ingroup rpmcli
671  */
672 /*@unchecked@*/
673 extern struct poptOption rpmInstallPoptTable[];
674
675 /*@}*/
676 /* ==================================================================== */
677 /** \name RPMDB */
678 /*@{*/
679 /* --- database modes */
680
681 /** \ingroup rpmcli
682  * Describe database command line requests.
683  */
684 struct rpmDatabaseArguments_s {
685     int init;                   /*!< from --initdb */
686     int rebuild;                /*!< from --rebuilddb */
687     int verify;                 /*!< from --verifydb */
688 };
689
690 /** \ingroup rpmcli
691  */
692 /*@unchecked@*/
693 extern struct rpmDatabaseArguments_s rpmDBArgs;
694
695 /** \ingroup rpmcli
696  */
697 /*@unchecked@*/
698 extern struct poptOption rpmDatabasePoptTable[];
699
700 /*@}*/
701 /* ==================================================================== */
702 /** \name RPMK */
703 /*@{*/
704
705 /** \ingroup rpmcli
706  * Import public key packet(s).
707  * @todo Implicit --update policy for gpg-pubkey headers.
708  * @param ts            transaction set
709  * @param pkt           pgp pubkey packet(s)
710  * @param pktlen        pgp pubkey length
711  * @return              0 on success
712  */
713 int rpmcliImportPubkey(const rpmts ts,
714                 const unsigned char * pkt, ssize_t pktlen)
715         /*@globals RPMVERSION, rpmGlobalMacroContext,
716                 fileSystem, internalState @*/
717         /*@modifies ts, rpmGlobalMacroContext,
718                 fileSystem, internalState @*/;
719
720 /** \ingroup rpmcli
721  * Bit(s) to control rpmReSign() operation.
722  */
723 /*@-typeuse@*/
724 typedef enum rpmSignFlags_e {
725     RPMSIGN_NONE                = 0,
726     RPMSIGN_CHK_SIGNATURE       = 'K',  /*!< from --checksig */
727     RPMSIGN_NEW_SIGNATURE       = 'R',  /*!< from --resign */
728     RPMSIGN_ADD_SIGNATURE       = 'A',  /*!< from --addsign */
729     RPMSIGN_IMPORT_PUBKEY       = 'I',  /*!< from --import */
730 } rpmSignFlags;
731 /*@=typeuse@*/
732
733 /** \ingroup rpmcli
734  */
735 /*@unchecked@*/
736 extern struct poptOption rpmSignPoptTable[];
737
738 /** \ingroup rpmcli
739  * Create/Modify/Check elements from signature header.
740  * @param ts            transaction set
741  * @param qva           mode flags and parameters
742  * @param argv          array of arguments (NULL terminated)
743  * @return              0 on success
744  */
745 int rpmcliSign(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
746         /*@globals RPMVERSION, rpmGlobalMacroContext,
747                 fileSystem, internalState @*/
748         /*@modifies ts, qva, rpmGlobalMacroContext,
749                 fileSystem, internalState @*/;
750
751 /*@}*/
752
753 #ifdef __cplusplus
754 }
755 #endif
756
757 #endif  /* H_RPMCLI */