RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Per Øyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 21-Nov-2010 12:52:32 Branch: HEAD Handle: 2010112111523002 Added files: rpm/perl/RPM Sign.pm rpm/perl/t/gnupg passphrase pubring.gpg random_seed secring.gpg test-key.gpg trustdb.gpg Modified files: rpm CHANGES rpm/perl Makefile.am RPM.pm RPM.xs RPM_Transaction.xs rpm/perl/RPM Transaction.pm Log: perl: start on adding back some missing functionality from RPM4: RPM::Sign, RPM::Transaction::importpubkey, RPM::Transaction::checkrpm. Summary: Revision Changes Path 1.3495 +2 -0 rpm/CHANGES 1.21 +3 -0 rpm/perl/Makefile.am 1.10 +3 -0 rpm/perl/RPM.pm 1.33 +16 -0 rpm/perl/RPM.xs 1.1 +204 -0 rpm/perl/RPM/Sign.pm 1.7 +8 -0 rpm/perl/RPM/Transaction.pm 1.19 +45 -0 rpm/perl/RPM_Transaction.xs 1.1 +6 -0 rpm/perl/t/gnupg/passphrase 1.1 BLOB rpm/perl/t/gnupg/pubring.gpg 1.1 BLOB rpm/perl/t/gnupg/random_seed 1.1 BLOB rpm/perl/t/gnupg/secring.gpg 1.1 +26 -0 rpm/perl/t/gnupg/test-key.gpg 1.1 BLOB rpm/perl/t/gnupg/trustdb.gpg ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.3494 -r1.3495 CHANGES --- rpm/CHANGES 11 Nov 2010 21:14:09 -0000 1.3494 +++ rpm/CHANGES 21 Nov 2010 11:52:30 -0000 1.3495 @@ -1,4 +1,6 @@ 5.3.5 -> 5.4a1: + - proyvind: perl: start on adding back some missing functionality from RPM4: + RPM::Sign, RPM::Transaction::importpubkey, RPM::Transaction::checkrpm. - proyvind: add a first prototype scripts/dbconvert.sh for handling rpmdb conversion during upgrades. - jbj: rpmdb: double the defaults for locking tunables. @@ . patch -p0 <<'@@ .' Index: rpm/perl/Makefile.am ============================================================================ $ cvs diff -u -r1.20 -r1.21 Makefile.am --- rpm/perl/Makefile.am 31 Dec 2009 14:46:45 -0000 1.20 +++ rpm/perl/Makefile.am 21 Nov 2010 11:52:31 -0000 1.21 @@ -15,7 +15,10 @@ RPM_Files.xs RPM/Files.pm t/07.files.t \ RPM_Dependencies.xs RPM/Dependencies.pm t/08.dependencies.t \ RPM_Spec.xs RPM/Spec.pm t/09.spec.t \ + RPM/RPM_Sign.pm t/10.sign.t t/00.pod.coverage.t t/00.pod.t \ + t/gnupg/passphrase t/gnupg/pubring.gpg t/gnupg/random_seed \ + t/gnupg/secring.gpg t/gnupg/test-key.gpg t/gnupg/trustdb.gpg \ hdlist-test.hdr test-rpm-1.0-1.noarch.rpm test-rpm-1.0-1.src.rpm \ test-rpm.spec @@ . patch -p0 <<'@@ .' Index: rpm/perl/RPM.pm ============================================================================ $ cvs diff -u -r1.9 -r1.10 RPM.pm --- rpm/perl/RPM.pm 11 Oct 2008 00:41:46 -0000 1.9 +++ rpm/perl/RPM.pm 21 Nov 2010 11:52:31 -0000 1.10 @@ -158,6 +158,9 @@ Signature validation. +=head2 resign +Resign a package. + =head1 HISTORY =over 8 @@ . patch -p0 <<'@@ .' Index: rpm/perl/RPM.xs ============================================================================ $ cvs diff -u -r1.32 -r1.33 RPM.xs --- rpm/perl/RPM.xs 21 Aug 2009 03:18:37 -0000 1.32 +++ rpm/perl/RPM.xs 21 Nov 2010 11:52:31 -0000 1.33 @@ -24,6 +24,7 @@ #include "rpmts.h" #include "rpmte.h" #include "rpmevr.h" +#include "rpmcli.h" #include "misc.h" /* The perl callback placeholder for output err messages */ @@ -223,3 +224,18 @@ (void)rpmtsFree(ts); ts = NULL; +int +resign(passphrase, rpmfile) + char * passphrase + char * rpmfile + CODE: + QVA_t qva = &rpmQVKArgs; + const char *file[] = { (const char*)rpmfile, NULL }; + + qva->qva_mode = RPMSIGN_ADD_SIGNATURE; + qva->passPhrase = passphrase; + + RETVAL = rpmcliSign(NULL, qva, file); + OUTPUT: + RETVAL + @@ . patch -p0 <<'@@ .' Index: rpm/perl/RPM/Sign.pm ============================================================================ $ cvs diff -u -r0 -r1.1 Sign.pm --- /dev/null 2010-11-21 12:46:12.000000000 +0100 +++ Sign.pm 2010-11-21 12:52:31.734032201 +0100 @@ -0,0 +1,204 @@ +package RPM::Sign; + +use strict; +use Exporter; +use RPM; +use RPM::PackageIterator; +use RPM::Header; +use vars qw($AUTOLOAD); + +our @ISA = qw(Exporter); + +our @EXPORT = qw( +); + +sub new { + my ($class, %options) = @_; + + my $Sign; + $Sign = { + _signature => undef, + name => undef, + path => undef, + checkrpms => 1, + passphrase => undef, + + password_file => undef, + + log => sub { + my ($m, @v) = @_; + printf STDERR "$m\n", @v; + }, + + }; + + foreach (keys %$Sign) { + defined($options{$_}) and $Sign->{$_} = $options{$_}; + } + + bless($Sign, $class); + $Sign->getpubkey(); + $Sign->getpasswdfile(); + $Sign; +} + +sub getpasswdfile { + my ($self) = @_; + $self->{password_file} or return 1; + open(my $hpass, "<", $self->{password_file}) or return 0; + $self->{passphrase} = <$hpass>; + chomp($self->{passphrase}); + close($hpass); + 1; +} + +sub adjustmacro { + my ($self) = @_; + + defined($self->{_signature}) and RPM::add_macro("_signature $self->{_signature}"); + + foreach my $macro (qw(_gpg_name _pgp_name)) { + RPM::add_macro("$macro $self->{name}") if (defined($self->{name})); + } + + foreach my $macro (qw(_gpg_path _pgp_path)) { + RPM::add_macro("$macro $self->{path}") if (defined($self->{path})); + } +} + +sub restoremacro { + my ($self) = @_; + + if (defined($self->{_signature})) { RPM::del_macro('_signature'); } + + if (defined($self->{name})) { + RPM::del_macro('_gpg_name'); + RPM::del_macro('_pgp_name'); + } + + if (defined($self->{path})) { + RPM::del_macro('_gpg_path'); + RPM::del_macro('_pgp_path'); + } +} + +sub getpubkey { + my ($self) = @_; + $self->adjustmacro(); + my $gpgcmd; + if (RPM::expand_macro("%_signature") eq "gpg") { + $gpgcmd = '%__gpg --homedir %_gpg_path --list-public-keys --with-colons \'%_gpg_name\''; + } + open(my $hgpg, RPM::expand_macro($gpgcmd) .'|') or return undef; + while (my $l = <$hgpg>) { + chomp($l); + my @v = split(':', $l); + if ($v[0] eq 'pub') { + $self->{keyid} = $v[4]; + last; + } + } + close($hgpg); + $self->restoremacro(); +} + +sub rpmsign { + my ($self, $rpm, $header) = @_; + my $need = 1; + + $header or return -1; + + if (RPM::expand_macro("_signature") || "" eq "gpg") { + my $sigid = $header->tagformat("%{DSAHEADER:pgpsig}"); + ($sigid) = $sigid =~ m/Key ID (\S+)/; + if ($sigid && lc($sigid) eq lc($self->{keyid} || "")) { $need = 0 } + } + + if ($need > 0) { + $self->adjustmacro(); + rpmresign($self->{passphrase}, $rpm) and $need = -1; + $self->restoremacro(); + } + + $need; +} + +sub rpmssign { + my ($self, @rpms) = @_; + + RPM::parserpms( + rpms => [ @rpms ], + checkrpms => $self->{checkrpms}, + callback => sub { + my (%arg) = @_; + defined($arg{header}) or do { + $self->{log}->("bad rpm %s", $arg{rpm}); + return; + }; + my $res = $self->rpmsign($arg{rpm}, $arg{header}); + if ($res > 0) { $self->{log}->("%s has been resigned", $arg{rpm}); + } elsif ($res < 0) { $self->{log}->("Can't resign %s", $arg{rpm}); } + }, + ); +} + +1; + +__END__ + +=head1 NAME + +RPM::Sign + +=head1 SYNOPSIS + +A container to massively resign packages + +=head1 DESCRIPTION + +This object retains gpg options and provides functions to easilly sign or +resign packages. It does not resign packages having already the proper +signature. + +=head1 METHODS + +=head2 new(%options) + +Create a new RPM::Sign object. + +Options are: + +=over 4 + +=item name + +The gpg key identity to use + +=item path + +the gpg homedir where keys are located + +=item password_file + +Use passphrase contains in this files + +=item passphrase + +Use this passphrase to unlock the key + +=item checkrpms + +Set to 0 remove the signature checking on packages + +=back + +=head2 rpmssign(@filelist) + +Sign or resign the packages passed are arguments + +=head1 SEE ALSO + +L<RPM> +L<RPM::Header> + +=cut @@ . patch -p0 <<'@@ .' Index: rpm/perl/RPM/Transaction.pm ============================================================================ $ cvs diff -u -r1.6 -r1.7 Transaction.pm --- rpm/perl/RPM/Transaction.pm 14 Aug 2007 16:38:04 -0000 1.6 +++ rpm/perl/RPM/Transaction.pm 21 Nov 2010 11:52:31 -0000 1.7 @@ -154,6 +154,14 @@ Read a rpm and return a L<RPM::Header> object +=head2 $ts->importpubkey + +Import public key. + +=head2 $ts->checkrpm + +Check rpm..? (FIXME) + =cut 1; @@ . patch -p0 <<'@@ .' Index: rpm/perl/RPM_Transaction.xs ============================================================================ $ cvs diff -u -r1.18 -r1.19 RPM_Transaction.xs --- rpm/perl/RPM_Transaction.xs 30 Apr 2010 22:39:47 -0000 1.18 +++ rpm/perl/RPM_Transaction.xs 21 Nov 2010 11:52:31 -0000 1.19 @@ -522,3 +522,48 @@ PUTBACK; _rpm2header(ts, filename, 0); SPAGAIN; + +int +importpubkey(ts, filename) + rpmts ts + char * filename + PREINIT: + uint8_t *pkt = NULL; + size_t pktlen = 0; + int rc; + CODE: + rpmtsClean(ts); + + if ((rc = pgpReadPkts(filename, (uint8_t ** ) &pkt, &pktlen)) <= 0) { + RETVAL = 1; + } else if (rc != PGPARMOR_PUBKEY) { + RETVAL = 1; + } else if (rpmcliImportPubkey(ts, pkt, pktlen) != RPMRC_OK) { + RETVAL = 1; + } else { + RETVAL = 0; + } + free(pkt); + OUTPUT: + RETVAL + +void +checkrpm(ts, filename, sv_vsflags = NULL) + rpmts ts + char * filename + SV * sv_vsflags + PREINIT: + rpmVSFlags vsflags = RPMVSF_DEFAULT; + rpmVSFlags oldvsflags = RPMVSF_DEFAULT; + PPCODE: + oldvsflags = rpmtsVSFlags(ts); /* keep track of old settings */ + if (sv_vsflags != NULL) { + vsflags = sv2constant((sv_vsflags), "rpmvsflags"); + rpmtsSetVSFlags(ts, vsflags); + } + PUTBACK; + _rpm2header(ts, filename, 1); /* Rpmread header is not the most usefull, + * but no other function in rpmlib allow this :( */ + SPAGAIN; + rpmtsSetVSFlags(ts, oldvsflags); /* resetting in case of change */ + @@ . patch -p0 <<'@@ .' Index: rpm/perl/t/gnupg/passphrase ============================================================================ $ cvs diff -u -r0 -r1.1 passphrase --- /dev/null 2010-11-21 12:46:12.000000000 +0100 +++ passphrase 2010-11-21 12:52:32.164055661 +0100 @@ -0,0 +1,6 @@ +RPM4 + +# $Id: passphrase,v 1.1 2010/11/21 11:52:31 pkarlsen Exp $ +# This is key passphrase, this key is here only for testing. +# Do not use it for signing/crypting. +# Do not trust it. @@ . (cd rpm/perl/t/gnupg && \ uudecode <<'@@ .' && \ xdelta patch pubring.gpg.xdelta /dev/null pubring.gpg && \ rm -f pubring.gpg.xdelta) Index: rpm/perl/t/gnupg/pubring.gpg ============================================================================ begin 664 pubring.gpg.xdelta M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,S$R,#DN M;G5L;'-H:65L82XS,3(P.2YA;&p...@````````#f\fxb,7AI=I$01:&-3]O MW<[CX_IT^7J[RLTR'F:^],5.&UR/K>@_]([):U?AI]6/A=2GJ`HN.[3[ZQ*5 M!5E\LRWBMSP\^3BCY+\XJ\"R3N9(P;`ue9x+`mts_gy3copws_...@d)2YT6 MB$\+^3"]QO+A7M\YGU-=[`7BZYU^.9EOBUWEK.$K\KG_\![;==W/Y?\),RQ8 MSF!VU>EQYC[GJ8>;(Q_X3;OTMB.5^9^AHX;UN=5//U9*[)a...@f5/[Q6[<WI; M3JS^^W;a...@f\x7;?6?YJ=34=9S>=&67u...@_-5d?g!!cl/V#D%UG<E.$:] M>K0F[*GEP76'2]5?/Y1G?&(R:>G_]TM[KZ\MW+W0(<G]1//6*WMONAB<T]EC M6=*7=S;?P%/NC'GZ.?N^U_PS%#M;!3:S,$Q>-#V7_Z#CN1\+.Y1^BZVL"%N] M-?BG[NWG9V(^7"I[<Z7ZN,DT)C.EG28\TNR'*Y9?"9ny[mjbi__*kov...@u MZ^RIW5,/7TT)>=WRX4]^1-E5E5/=;8T?>21EIW3G_&6...@mmj)HAXC)!I%` MQ^+L7NWY2D_>+...@mrs$=m,V\:]7:N>=EF7?4NN1DI-97*)0...@hdle,K%31" M,c*+...@e9^74zf0ee\$el[,2U<H*LA5*,Y,SP.QB_/32LH3BU)U%%S\%?S\ M0Q1"@UV#%3Q#X/r0...@$*"`IH)-2FI9:HY#;F)>2E%B=BI(IUYR?JY=1QR+ ML"`...@qpk$rbe,$DSLW%S<K`S,S&+,C$SBS$Q,LDQ,HDW,'!Q"FA-%^M:>#_& MX])QAGF&G3$_77HTNV(\-IOLF_+\S?O,6#&&N;*.SJNKZX_Z=_YM+[+0G?*J mxw...@u,#,Q;6H("?$T4<O-32G-2%33`'+AO=15HXMV\Q+S$HI3\/(>JQ*(D MO?RB="2?.IVM-R?&IR;2#/,4_4.$3au...@d&;&^^X38!,8//_XPS)5?'W7E MCW)Y^$WQDI6_#1?'%:Z(3P;Y="<C+SC'";`P',Y_*[Y_K_UB1B&MM=N.G*AX MOX^KJ\-0B9W+(.;Q[NJBT)94MG_?LEP"0R9\_9A9Z%'7K9";F&6FM,&>Y<T3 M[K>s...@$.^0<7=Z^6=_O4<#*$]]:B]>NVF*Q:I>+DZ2)TYJUPC.80O28TI+D M2^H%Q*\'=7_\JG1YUASEGW.-:ZLGZ"U.\'K,P,S*_#]LAMF3I&`&n...@kgyhf ME3V])q...@[7mqw]/BW/JU+<5/O7B/>9V54A1T8_L3]/1<TZGE.U])>%[.T(Q= MT<JQ9_:AW]/?,88_[%R^W5M!2^9.Y%0+CC-<BS<NXRN--#LZ1=)(I>>GUV3Y MN(RX_V<:UNG^GZQW:%W0R^^K%O]?NV*":_IS5D%?B>,=GBP2P##GA*4N'N3@ m...@f!]ig,$VJ3A7K$Y0]=9C&];87I5+3`SS,][/LC=WG'VF)BMUN:QDZ/)" m[g^vh....@#""`->t...@0``!^+"`````````-C8&a...@9f!@6/'TN'U4QBJ6JQF3 MK_VJ_/&FYA(G(R./1D%B27*&0DIB2:(f...@6,#`R7.`'(-3Y&0...@``````!*(E '6$1:,#`T)0`` ` end @@ . (cd rpm/perl/t/gnupg && \ uudecode <<'@@ .' && \ xdelta patch random_seed.xdelta /dev/null random_seed && \ rm -f random_seed.xdelta) Index: rpm/perl/t/gnupg/random_seed ============================================================================ begin 664 random_seed.xdelta M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,S$R,#DN M;G5L;'-H:65L82XS,3(P.2YA;&p...@````````#`5d"IOU#*O:/OWQ^&/C' M+S[L!5+V&ybq__2cc...@]dtm-9d'7,\+>E1!"KA,&)-`3GZ7>%Y]YB5-QKJ M,?I,^'H`/[$3TP"['V'G$F^DME1F:g...@pfa3cxwrw8=#voe18kf<]5$S'U"DD MH;.DB!K$9*G4'@W=/NNL3,&n...@eu-i@XB0S7QPT';IC3UA^'d...@joo^a M,\LM=87BPJ%C-W3)D:[S,D+X7Y!8/2R]^EK")@X"_2=S*/=4+-+(\"<6"@38 M;N/=TUG2W//V0*8/<8Z,o%fla\n...@8-r"B7GKMQ+9ED<$ZO`8B%N7%V0G7 M!B7,%(:$E3"%X`FAC[XB>.,XF\F+OX)HS3+A?S.GMB:W9)FWKTB7=)K4Y[O? MJU`^W0Q)osonr...@_>6<GRB=_Y)*T''(C<2+J0,C3SK%<`$7(9...@k"=Z73< ML#KH,;BM`>WN'L``)R?_+L\_Q2%:TL,EW-KGYVQ3D\[5T+8"PD62%YIY[!#( MB0JY!]*UZJK6S#G^Q"J$XE(y`+i67q?*q]6]...@2hsl=.rmltb+&.?FH5<; M^]KTIR\4T<\@(!>CJ!5U8^NR"C1&N\Y`NR:14C+)?...@b&PY)?6+-?(FWOS8) MAF\/5JH8*SOAS&CHZ4#Q$H&_.F))BT9]CV\[X('7FC68)$L.5;7?5O0ZM"`# M[EN!ALHJX"C76=K!*WW^E5]DC#LDGOE(RC#DTX)2.221*N_A6MJ_$:RJ)0*" M8T:\':`#KIJ"5...@1c],@%^;L)B'<!...@9#5m4pkg[ufk5#f_>_)LZPS'&G^K#:[ MIO;7!;P*UCU(GUD"```...@````````#8v!h8&9...@8%bqmm32gku&K;#5__\- M1]?=.C=9&!EY-`H22Y(S%%(22Q(u...@9&"XR0(`T6D(FT(```````*Q)5A$ %6C`P-"4` ` end @@ . (cd rpm/perl/t/gnupg && \ uudecode <<'@@ .' && \ xdelta patch secring.gpg.xdelta /dev/null secring.gpg && \ rm -f secring.gpg.xdelta) Index: rpm/perl/t/gnupg/secring.gpg ============================================================================ begin 664 secring.gpg.xdelta M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,S$R,#DN M;G5L;'-H:65L82XS,3(P.2YA;&p...@````````#f\kxd,7AI=I$01:&-3]O MW<[CX_IT^7J[RLTR'F:^],5.&UR/K>@_]([):U?AI]6/A=2GJ`HN.[3[ZQ*5 M!5E\LRWBMSP\^3BCY+\XJ\"R3N9(P;`ue9x+`mts_gy3copws_...@d)2YT6 MB$\+^3"]QO+A7M\YGU-=[`7BZYU^.9EOBUWEK.$K\KG_\![;==W/Y?\),RQ8 MSF!VU>EQYC[GJ8>;(Q_X3;OTMB.5^9^AHX;UN=5//U9*[)a...@f5/[Q6[<WI; M3JS^^W;a...@f\x7;?6?YJ=34=9S>=&67u...@_-5d?g!!cl/V#D%UG<E.$:] M>K0F[*GEP76'2]5?/Y1G?&(R:>G_]TM[KZ\MW+W0(<G]1//6*WMONAB<T]EC M6=*7=S;?P%/NC'GZ.?N^U_PS%#M;!3:S,$Q>-#V7_Z#CN1\+.Y1^BZVL"%N] M-?BG[NWG9V(^7"I[<Z7ZN,DT)C.EG28\TNR'*Y9?"9ny[mjbi__*kov...@u MZ^RIW5,/7TT)>=WRX4]^1-E5E5/=;8T?>21EIW3G_&6...@mmj)HAXC)!I%` MQ^+L7NWY2D_>+...@mrs$=m,V\:]7:N>=EF7_Q\S,=/O/E82NT!>?$C)67[+U MDIY?*Y^<;FWSM6\I3]0%%JO5-FL_G]FW8N^U[.H(G:];tih...@+:3...@=ef4 M?D%I2ZU'2DYF<8E"22J0R$ZM5-`(R<@L!K.`5'Y>3J5"6GX16#HS+UVAJ"!7 m...@s/0_$+LY/*RE/+$K547#Q5_#S#U$(#78-5O`,@?...@d*#0x`"f...@hv*:EE MJ3D.N8EY*46)V:d...@g7k)^;EV'7$LPH),#'*L3*"$QB3-S,;-R<'.S,0LRL3, M+,;$R"3'R"3>P,#%*:`U7:QKX?T8CTO'&>:'16FSGDH(9W3TT^\16#LML^WL M?PF&>2K^2T\I_DN+4-R4UB8;NIDSVN2CX`8F!H8M+4$!OB8*N?DII3FI"AI@ m#m...@ht\6y>8EYB44I^GD-58E&27GY1.I)/G<[6FQ/C4Q-IAGF*_B%"IPZG M,SR2C%C??4)L`N.''W\8YLJOC[KR1[D\_*9XR<K?AHOC"E?$)X-\.I<Q`IQA m...@8#n>_%=^_UWXQHY#6VFU'3E2\W\?5U6&HQ,YE$/-X=W51:$LJV[]O62Z! M(1.^?LPL]*CK5LA-S#)3VF#/\N8)]]O9,V2"'7*.+F_?K._W*&#EB6^MQ6M7 M;;%8M<O%2=+$:<U:X1E,(7I,:4GR)?4"XM>#NC]^5;H\:X[RS[G&M=43]!8G M>#UF8&9E_A\VP^Q)4C"#7=253TV3RI[>$PGP]KVX[VEQ;OW:EN*G7KS'O,Y* M*0JZL?T)>GJNZ=3RG:\D/"]G:,:N:.78,_O0[^GO&,,?=B[?[JV@)7,G<JH% MQQFNQ1N7\95&FAV=(FFDTO/3:[)\7$;<_S,-ZW3_3]8[M"[HY?=5B_^O73'! M-?TYJZ"OQ'&4O+'^&(]T1+#)YU^&2\\KL7',brkxr...@?wahm<A;#WJ_UK? M7NII>[?FUO-5SA(-DV9-N!K%5?[(3[;28WEV<VLK4X<GBP0P^CAA"94'.::\ M`ACFEUR/$K^MZJ^8>TGAOO6A=?H,%HI^#'-X&4_6Y/&>\,]O/3+KRZUWNEL_ M/_`%Q107`*2T4;M<!0``'XL(`````````V-@:&!F8&!8D;u...@4kw'#YZ+$<_> M*KW^%K;N#A<C(X]&06))<H9"2F))HB8V!8P,#'>X`/IU*0I"```````%*"58 &1%HP,#0E ` end @@ . patch -p0 <<'@@ .' Index: rpm/perl/t/gnupg/test-key.gpg ============================================================================ $ cvs diff -u -r0 -r1.1 test-key.gpg --- /dev/null 2010-11-21 12:52:32.000000000 +0100 +++ test-key.gpg 2010-11-21 12:52:32.344063929 +0100 @@ -0,0 +1,26 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.4 (GNU/Linux) + +mQGiBEDpJpERBACs+drbbg4K8tPXhyTZdgwDDmejQrBFxqiPwu4CSrpx8qvjEieU +JRGmwrv1pCSgag6bOF+04cnjaHT/FwUQpokDWRFWrHlJoFFHaP32I1n+nj/bv5Bg +pUKgF5ZU8Jd8OeG9TZzzZUQ/EF9/QvpCN7ZdqkMoTRTzj8O8Pa6L5x/+EwCgpwA2 +1ULjab5DlcODWeBOltLtiGUD/jFBKDvOq+XxeRi4k8gEvI3UPs4utMir/e2hw1yC +N6G3TZpOJHx+iMuy1LoqrBcwz3pZb1MwucA+QlF/imBBWurirFblOcGuw3Un6+Ef +AeQ0kqX/76WN161xu6FAYkfIg7XUvdlEMM4svDl0jm7NbzBJHsw3Z84/jusPmCGJ +hRCzBACTopdtD8FBzvihiCL7Fql4Vqu1U/kt2+fMXPDSduzUe8c0lgI2Irk0DBsH +w3in1FaZrtai5f521v4b8Xqazcq7lcPVZFTrhPD8b1h21STKi4aB8QwZHZSLbP0A +0kGLFqhyuBQ0sBRRQXNrjSufIuTto+BOplQ9srYX9dR9nssdB7R9SGRsaXN0IHRl +c3Qga2V5IChUaGlzIGtleSBpcyBvbmx5IGZvciB0ZXN0aW5nIHJwbSBzaWduaW5n +IHNvZnR3YXJlLCBETyBOT1QgVVNFUyBJVCwgRE8gTk9UIFRSVVNUIElUKSA8ZGV2 +ZWxAbWFuZHJha2Vzb2Z0LmNvbT6IXgQTEQIAHgUCQOkmkQIbAwYLCQgHAwIDFQID +AxYCAQIeAQIXgAAKCRAqlxaKod9cSNLHAJ4xiVz5RIwpilxIszS+lOfs72ldFgCd +HUFDq3t/xU+J/YdyOC2U6ojrbLy5AQ0EQOkmkRAEAMNv7Re/vT+jARIqrbbEyHjv +vgqKiDEiBwowXOO7e3JVhGUG/vZqRFFUkPXxaXFIfosgbWFqNiKwPwTs5Avtm5gc +U0BsxaeHsy9O4lCpyPaFc62qtDiqukRCGTRCrK0TmAJULgJmYh90fxAX11KL8fUi +05qcI/mdM317kC6jYErjAAMFA/9WmDbkYlMAPlrU8oKSduXeFFBLTdG+5XNtf62E +c+VKDcZKzRohEUYG/FLlzoLKp7nqGEnTaCldqIUIvJvC+5fuAVfhiae3SyAqHNxZ +lTgIzAqjsaYOdVk2xZQZMiSM+UqTH15oXv/MgK4t/5Muwq5S6feqo/+tqJBFZ+cF +EU0Yx4hJBBgRAgAJBQJA6SaRAhsMAAoJECqXFoqh31xISlAAn1kzaAaSc20WfhEl +2uM8BV2NJNICAJ9o75o/N0GbzHxqZacdGVWncQv+PQ== +=QAx/ +-----END PGP PUBLIC KEY BLOCK----- @@ . (cd rpm/perl/t/gnupg && \ uudecode <<'@@ .' && \ xdelta patch trustdb.gpg.xdelta /dev/null trustdb.gpg && \ rm -f trustdb.gpg.xdelta) Index: rpm/perl/t/gnupg/trustdb.gpg ============================================================================ begin 664 trustdb.gpg.xdelta M)5A$6C`P-"4````(`!$`$`````````````````````!S:&EE;&$N,S$R,#DN M;G5L;'-H:65L82XS,3(P.2YA;&p...@````````#8tpo2&=F9F1E``*GL_7] m...@!(Q<."70PJFX0J9,;Y.X;53>JCD1U/`Q)@<9O,UC9E+3NL"9h31?...@_ MQH,-(JF`4,?+X!NL8'`PXLPZTX335XXO^#%3Z.&#I6!U9CP,R.IN.CZH*YZ^ M8L*]7S=O_4NP",u...@7o(/I$Z>@1G9?0"0NY78*04``!^+"`````````-C8&A@ m...@6+'3X\B9"FG>HDD:16M*3C#YK>1b9.3...@l2<Y02$DL2=3$IH"1...@6$e 6%p#$8k...@```````-,E6$1:,#`T)0`` ` end @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org