22 #define _RPMTS_INTERNAL
34 #define JBJDEBUG(_list) if (_jbj) fprintf _list
40 #define FF_ISSET(_fflags, _FLAG) ((_fflags) & (RPMFILE_##_FLAG))
42 #define QVA_ISSET(_qvaflags, _FLAG) ((_qvaflags) & (QUERY_##_FLAG))
44 #define VSF_ISSET(_vsflags, _FLAG) ((_vsflags) & (RPMVSF_##_FLAG))
45 #define VSF_SET(_vsflags, _FLAG) \
46 (*((unsigned *)&(_vsflags)) |= (RPMVSF_##_FLAG))
47 #define VSF_CLR(_vsflags, _FLAG) \
48 (*((unsigned *)&(_vsflags)) &= ~(RPMVSF_##_FLAG))
52 #define FF_ISSET(_fflags, _FLAG) ((_fflags) & (RPMFILE_##_FLAG))
54 #define QVA_ISSET(_qvaflags, _FLAG) ((_qvaflags) & (QUERY_##_FLAG))
56 #define VSF_ISSET(_vsflags, _FLAG) ((_vsflags) & (RPMVSF_##_FLAG))
57 #define VSF_SET(_vsflags, _FLAG) (_vsflags) |= (RPMVSF_##_FLAG)
58 #define VSF_CLR(_vsflags, _FLAG) (_vsflags) &= ~(RPMVSF_##_FLAG)
65 size_t size,
unsigned short mode,
67 unsigned short rdev,
unsigned int nlink,
68 const char * owner,
const char * group,
73 #if defined(RPM_VENDOR_OPENPKG)
77 char ownerfield[13+1], groupfield[13+1];
79 char ownerfield[8+1], groupfield[8+1];
85 static struct tm nowtm;
86 const char * namefield =
name;
96 strncpy(ownerfield, owner,
sizeof(ownerfield));
97 ownerfield[
sizeof(ownerfield)-1] =
'\0';
99 strncpy(groupfield, group,
sizeof(groupfield));
100 groupfield[
sizeof(groupfield)-1] =
'\0';
103 #if defined(RPM_VENDOR_OPENPKG)
107 sprintf(sizefield,
"%8u", (
unsigned)size);
109 sprintf(sizefield,
"%12u", (
unsigned)size);
116 alloca(strlen(name) +
sizeof(
" -> ") + strlen(linkto));
117 sprintf(nf,
"%s -> %s", name, linkto);
119 }
else if (S_ISCHR(mode)) {
121 sprintf(sizefield,
"%3u, %3u", ((
unsigned)(rdev >> 8) & 0xff),
122 ((
unsigned)rdev & 0xff));
123 }
else if (S_ISBLK(mode)) {
125 sprintf(sizefield,
"%3u, %3u", ((
unsigned)(rdev >> 8) & 0xff),
126 ((
unsigned)rdev & 0xff));
130 tm = localtime(&when);
134 if (now > when + 6
L * 30
L * 24
L * 60
L * 60
L ||
135 now < when - 60
L * 60
L)
148 (void)strftime(timefield,
sizeof(timefield) - 1, fmt, tm);
151 #if defined(RPM_VENDOR_OPENPKG)
155 sprintf(te,
"%s %d %-13s %-13s %8s %s %s", perms,
156 (
int)nlink, ownerfield, groupfield, sizefield, timefield, namefield);
158 sprintf(te,
"%s %4d %-7s %-8s %10s %s %s", perms,
159 (
int)nlink, ownerfield, groupfield, sizefield, timefield, namefield);
161 perms =
_free(perms);
170 const char * errstr =
"(unkown error)";
207 size_t tb = 2 * BUFSIZ;
214 JBJDEBUG((stderr,
"--> %s(%p,%p,%p)\n", __FUNCTION__, qva, ts, h));
226 size_t tx = (te - t);
247 te =
stpcpy(te,
_(
"(contains no files)"));
255 unsigned short fmode;
256 unsigned short frdev;
261 const char * fdigest;
274 {
static char hex[] =
"0123456789abcdef";
277 const unsigned char * digest =
rpmfiDigest(fi, &dalgo, &dlen);
280 fdigest = p = (
char *)
xcalloc(1, ((2 * dlen) + 1));
281 for (j = 0; j < dlen; j++) {
282 unsigned k = *digest++;
283 *p++ = hex[ (k >> 4) & 0xf ];
284 *p++ = hex[ (k ) & 0xf ];
293 assert(fdigest != NULL);
317 if (fn) sb += strlen(fn);
318 if (fdigest) sb += strlen(fdigest);
319 if (fuser) sb += strlen(fuser);
320 if (fgroup) sb += strlen(fgroup);
321 if (flink) sb += strlen(flink);
322 if ((sb + BUFSIZ) > tb) {
323 size_t tx = (te - t);
338 te =
stpcpy(te,
_(
"replaced "));
341 te =
stpcpy(te,
_(
"not installed "));
344 te =
stpcpy(te,
_(
"net shared "));
347 te =
stpcpy(te,
_(
"wrong color "));
350 te =
stpcpy(te,
_(
"(no state) "));
353 sprintf(te,
_(
"(unknown %3d) "), fstate);
360 sprintf(te,
"%s %d %d %s 0%o ",
361 fn, (
int)fsize, fmtime, fdigest, fmode);
364 if (fuser && fgroup) {
366 sprintf(te,
"%s %s", fuser, fgroup);
373 sprintf(te,
" %s %s %u ",
374 FF_ISSET(fflags, CONFIG) ?
"1" :
"0",
379 sprintf(te,
"%s", (flink && *flink ? flink :
"X"));
388 if (S_ISDIR(fmode)) {
393 if (fuser && fgroup) {
396 fuser, fgroup, flink);
404 fdigest =
_free(fdigest);
414 JBJDEBUG((stderr,
"<-- %s(%p,%p,%p) rc %d\n", __FUNCTION__, qva, ts, h, rc));
426 JBJDEBUG((stderr,
"--> %s(%p,%p)\n", __FUNCTION__, qva, ts));
447 JBJDEBUG((stderr,
"<-- %s(%p,%p) rc %d\n", __FUNCTION__, qva, ts, ec));
469 JBJDEBUG((stderr,
"--> %s(%p,%p)\n", __FUNCTION__, qva, ts));
481 JBJDEBUG((stderr,
"<-- %s(%p,%p) rc %d\n", __FUNCTION__, qva, ts, ec));
490 static inline unsigned char nibble(
char c)
493 if (c >=
'0' && c <=
'9')
495 if (c >=
'A' && c <=
'F')
496 return (c -
'A') + 10;
497 if (c >=
'a' && c <=
'f')
498 return (c -
'a') + 10;
507 int provides_checked = 0;
509 JBJDEBUG((stderr,
"--> %s(%p,%p,%p)\n", __FUNCTION__, qva, ts, arg));
525 if (qva->
qva_mi == NULL) {
558 if (qva->
qva_mi == NULL) {
560 _(
"group %s does not contain any packages\n"), arg);
568 if (qva->
qva_mi == NULL) {
578 {
unsigned char MD5[16];
582 for (i = 0, s = arg; *s && isxdigit(*s); s++, i++)
590 for (i = 0, t = MD5, s = arg; i < 16; i++, t++, s += 2)
596 if (qva->
qva_mi == NULL) {
605 for (i = 0, s = arg; *s && isxdigit(*s); s++, i++)
613 if (qva->
qva_mi == NULL) {
623 unsigned char * digest;
627 for (dlen = 0, s = arg; *s && isxdigit(*s); s++, dlen++)
629 if ((dlen & 1) || dlen < 8) {
635 digest = (
unsigned char *) memset(
alloca(dlen), 0, dlen);
636 for (t = digest, s = arg; *s; t++, s += 2)
640 if (qva->
qva_mi == NULL) {
650 const char * myarg = arg;
663 iid = (unsigned) strtoul(myarg, &end, mybase);
664 if ((*end) || (end == arg) || (iid == UINT_MAX)) {
669 if (qva->
qva_mi == NULL) {
680 if (qva->
qva_mi == NULL) {
689 provides_checked = 1;
691 if (qva->
qva_mi == NULL) {
700 {
int gotpattern = 0;
703 if (arg[0] ==
'^' || arg[strlen(arg)-1] ==
'$') {
714 for (s = arg; *s !=
'\0'; s++) {
715 if (!(*s ==
'.' || *s ==
'/'))
722 fn =
xstrdup( (fn != NULL ? fn : arg) );
723 }
else if (*arg !=
'/') {
725 fn = (
char *)
rpmGetPath(curDir,
"/", arg, NULL);
726 curDir =
_free(curDir);
733 if (qva->
qva_mi == NULL && !provides_checked && !gotpattern) {
735 #if defined(RPM_VENDOR_MANDRIVA)
741 if (qva->
qva_mi == NULL) {
743 if (!gotpattern &&
Lstat(fn, &sb) != 0)
747 _(
"file %s is not owned by any package\n"), fn);
757 const char * myarg = arg;
770 hdrNum = (uint32_t) strtoul(myarg, &end, mybase);
771 if ((*end) || (end == arg) || (hdrNum == UINT_MAX)) {
777 if (qva->
qva_mi == NULL) {
779 _(
"record %u could not be read\n"), (
unsigned)hdrNum);
787 if (qva->
qva_mi == NULL) {
801 JBJDEBUG((stderr,
"<-- %s(%p,%p,%p) rc %d\n", __FUNCTION__, qva, ts, arg, res));
812 JBJDEBUG((stderr,
"--> %s(%p,%p,%p)\n", __FUNCTION__, ts, qva, argv));
898 assert(path != NULL);
908 JBJDEBUG((stderr,
"<-- %s(%p,%p,%p) rc %d\n", __FUNCTION__, ts, qva, argv, ec));
919 JBJDEBUG((stderr,
"--> %s(%p,%p,%p)\n", __FUNCTION__, ts, qva, argv));
940 #if defined(SUPPORT_NOSIGNATURES)
942 VSF_SET(vsflags, NOSHA1HEADER);
970 JBJDEBUG((stderr,
"<-- %s(%p,%p,%p) rc %d\n", __FUNCTION__, ts, qva, argv, ec));