Ravenports generated: 12 Oct 2023 22:54
[ravenports.git] / bucket_69 / ssvnc
1 # Buildsheet autogenerated by ravenadm tool -- Do not edit.
2
3 NAMEBASE=               ssvnc
4 VERSION=                1.0.29
5 KEYWORDS=               net
6 VARIANTS=               standard
7 SDESC[standard]=        Enhanced TightVNC Viewer
8 HOMEPAGE=               https://sourceforge.net/projects/ssvnc/
9 CONTACT=                nobody
10
11 DOWNLOAD_GROUPS=        main
12 SITES[main]=            SF/ssvnc/ssvnc/1.0.29
13 DISTFILE[1]=            ssvnc-1.0.29.src.tar.gz:main
14 DF_INDEX=               1
15 SPKGS[standard]=        complete
16                         primary
17                         docs
18
19 OPTIONS_AVAILABLE=      none
20 OPTIONS_STANDARD=       none
21
22 BUILD_DEPENDS=          imake:single:standard
23 RUN_DEPENDS=            stunnel:complete:standard
24                         xterm:complete:standard
25
26 USES=                   gmake jpeg perl:run ssl zlib tcl:tk,run
27 XORG_COMPONENTS=        ice sm x11 xaw xext xi xmu xpm xt
28
29 LICENSE=                GPLv2+:primary
30 LICENSE_TERMS=          primary:{{WRKDIR}}/TERMS
31 LICENSE_FILE=           GPLv2+:{{WRKSRC}}/COPYING
32 LICENSE_AWK=            TERMS:"^\# You must have stunnel"
33 LICENSE_SOURCE=         TERMS:{{WRKSRC}}/scripts/util/ss_vncviewer
34 LICENSE_SCHEME=         solo
35
36 MAKE_ARGS=              JSRC=""
37 MAKE_ENV=               ROOT="{{STAGEDIR}}"
38                         MANDIR="share/man"
39
40 post-patch:
41         ${REINPLACE_CMD} -e 's|netstat -ant|netstat -an|' \
42                 ${WRKSRC}/scripts/util/ss_vncviewer
43         ${REINPLACE_CMD} \
44                 -e 's|B ssvnc|B ssvnc-gui|' \
45                 -e 's| ssvnc | ssvnc-gui |' \
46                 ${WRKSRC}/man/man1/ssvnc.1
47
48 post-install:
49         # relocate sample file
50         ${MV} ${STAGEDIR}${STD_DOCDIR}/stunnel-server.conf \
51                 ${STAGEDIR}${PREFIX}/etc/stunnel-server.conf.sample
52
53 do-configure:
54         (cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
55                 ${MAKE_CMD} ${MAKE_ARGS} config)
56
57 [FILE:702:descriptions/desc.primary]
58 The Enhanced TightVNC Viewer package started as a project to add some
59 patches to the long neglected Unix TightVNC Viewer. However, now the
60 front-end GUI and wrapper scripts features dwarf the original.
61
62 It adds a GUI for Windows, Mac OS X, and Unix that automatically starts up
63 STUNNEL SSL tunnel for SSL or SSH connections to x11vnc, and then launches
64 the TightVNC Viewer to use the tunnel. It also enables SSL encrypted VNC
65 connections to any other VNC Server running an SSL tunnel, such as STUNNEL,
66 at their end. It can be used to perform SSH tunnelled connections to any
67 VNC Server as well. The tool has many additional features.
68
69 The short name for this project is "ssvnc" for SSL/SSH VNC Viewer.
70
71
72 [FILE:102:distinfo]
73 74df32eb8eaa68b07c9693a232ebe42154617c7f3cbe1d4e68d3fe7c557d618d       552796 ssvnc-1.0.29.src.tar.gz
74
75
76 [FILE:335:manifests/plist.primary]
77 @sample etc/stunnel-server.conf.sample
78 bin/
79  ssvnc-gui
80  ssvnc-stunnel
81  ssvnc-ts
82  ssvncviewer
83 lib/ssvnc/
84  lim_accept.so
85  ssvnc
86  ssvnc_cmd
87  tsvnc
88  ultravnc_dsm_helper
89  unwrap.so
90  vncstorepw
91  vncviewer
92 lib/ssvnc/util/
93  ss_vncviewer
94  ssvnc.tcl
95 share/applications/ssvnc.desktop
96 share/man/man1/
97  ssvnc-gui.1.gz
98  ssvnc.1.gz
99  ssvncviewer.1.gz
100
101
102 [FILE:23:manifests/plist.docs]
103 share/doc/ssvnc/README
104
105
106 [FILE:3195:patches/patch-Makefile]
107 --- Makefile.orig       2010-02-26 02:29:31 UTC
108 +++ Makefile
109 @@ -29,6 +29,7 @@ MAN      = man
110  MANDIR  ?= $(MAN)
111  APPS    ?= share/applications
112  BINNAME ?= ssvncviewer
113 +DOCS    ?= share/doc/ssvnc
114  
115  
116  VSRC = vnc_unixsrc
117 @@ -65,23 +66,30 @@ clean:
118         cd $(PSRC); $(MAKE) clean
119  
120  install: all
121 -       mkdir -p $(ROOT)$(PREFIX)/$(BIN) $(ROOT)$(PREFIX)/$(LIB) $(ROOT)$(PREFIX)/$(MANDIR)/man1
122 -       strip $(VIEWER)
123 -       cp -p $(VIEWER) $(ROOT)$(PREFIX)/$(LIB)
124 -       cp -p $(VNCSPW) $(ROOT)$(PREFIX)/$(LIB)
125 -       cp -p $(UNWRAP) $(ROOT)$(PREFIX)/$(LIB)
126 -       cp -p $(LIMACC) $(ROOT)$(PREFIX)/$(LIB)
127 -       cp -p $(ULTDSM) $(ROOT)$(PREFIX)/$(LIB)
128 -       cp -pR scripts/* $(ROOT)$(PREFIX)/$(LIB)
129 -       if [ "X$(JSRC)" != "X" ]; then cp -p $(ARCHIVE) $(ROOT)$(PREFIX)/$(LIB)/util; fi
130 -       cp -p $(MAN)/man1/ssvnc.1 $(ROOT)$(PREFIX)/$(MANDIR)/man1
131 -       ./wr_tool $(ROOT)$(PREFIX)/$(BIN)/ssvnc  $(PREFIX)/$(LIB)/ssvnc
132 -       ./wr_tool $(ROOT)$(PREFIX)/$(BIN)/tsvnc  $(PREFIX)/$(LIB)/tsvnc
133 -       ./wr_tool $(ROOT)$(PREFIX)/$(BIN)/sshvnc $(PREFIX)/$(LIB)/sshvnc
134 +       mkdir -p $(ROOT)$(PREFIX)/$(BIN) $(ROOT)$(PREFIX)/$(LIB)/util $(ROOT)$(PREFIX)/$(MANDIR)/man1
135 +       ${BSD_INSTALL_PROGRAM} $(VIEWER) $(ROOT)$(PREFIX)/$(LIB)
136 +       ${BSD_INSTALL_PROGRAM} $(VNCSPW) $(ROOT)$(PREFIX)/$(LIB)
137 +       ${BSD_INSTALL_LIB} $(UNWRAP) $(ROOT)$(PREFIX)/$(LIB)
138 +       ${BSD_INSTALL_LIB} $(LIMACC) $(ROOT)$(PREFIX)/$(LIB)
139 +       ${BSD_INSTALL_PROGRAM} $(ULTDSM) $(ROOT)$(PREFIX)/$(LIB)
140 +       ${BSD_INSTALL_SCRIPT} scripts/ssvnc $(ROOT)$(PREFIX)/$(LIB)
141 +       ${BSD_INSTALL_SCRIPT} scripts/ssvnc_cmd $(ROOT)$(PREFIX)/$(LIB)
142 +       ${BSD_INSTALL_SCRIPT} scripts/tsvnc $(ROOT)$(PREFIX)/$(LIB)
143 +       ${BSD_INSTALL_SCRIPT} scripts/util/ssvnc.tcl $(ROOT)$(PREFIX)/$(LIB)/util
144 +       ${BSD_INSTALL_SCRIPT} scripts/util/ss_vncviewer $(ROOT)$(PREFIX)/$(LIB)/util
145 +       if [ "X$(JSRC)" != "X" ]; then ${BSD_INSTALL_DATA} $(ARCHIVE) $(ROOT)$(PREFIX)/$(LIB)/util; fi
146 +       ${BSD_INSTALL_MAN} $(MAN)/man1/ssvnc.1 $(ROOT)$(PREFIX)/$(MANDIR)/man1/ssvnc.1
147 +       ${BSD_INSTALL_MAN} $(MAN)/man1/ssvnc.1 $(ROOT)$(PREFIX)/$(MANDIR)/man1/ssvnc-gui.1
148 +       ./wr_tool $(ROOT)$(PREFIX)/$(BIN)/ssvnc-gui  $(PREFIX)/$(LIB)/ssvnc
149 +       ./wr_tool $(ROOT)$(PREFIX)/$(BIN)/ssvnc-ts  $(PREFIX)/$(LIB)/tsvnc
150 +       ./wr_tool $(ROOT)$(PREFIX)/$(BIN)/ssvnc-stunnel  $(PREFIX)/$(LIB)/util/ss_vncviewer
151         if [ "X$(APPS)" != X ]; then mkdir -p $(ROOT)$(PREFIX)/$(APPS); fi
152 -       if [ "X$(APPS)" != X ]; then cp -p ssvnc.desktop $(ROOT)$(PREFIX)/$(APPS); fi
153 -       if [ "X$(BINNAME)" != X ]; then cp -p $(VIEWER) $(ROOT)$(PREFIX)/$(BIN)/$(BINNAME); fi
154 -       if [ "X$(BINNAME)" != X ]; then cp -p $(MAN)/man1/ssvncviewer.1 $(ROOT)$(PREFIX)/$(MANDIR)/man1/$(BINNAME).1; fi
155 +       if [ "X$(APPS)" != X ]; then ${BSD_INSTALL_DATA} ssvnc.desktop $(ROOT)$(PREFIX)/$(APPS); fi
156 +       if [ "X$(BINNAME)" != X ]; then ${BSD_INSTALL_PROGRAM} $(VIEWER) $(ROOT)$(PREFIX)/$(BIN)/$(BINNAME); fi
157 +       if [ "X$(BINNAME)" != X ]; then ${BSD_INSTALL_MAN} $(MAN)/man1/ssvncviewer.1 $(ROOT)$(PREFIX)/$(MANDIR)/man1/$(BINNAME).1; fi
158 +       if [ "X$(DOCS)" != X ]; then mkdir -p $(ROOT)$(PREFIX)/$(DOCS); fi
159 +       if [ "X$(DOCS)" != X ]; then ${BSD_INSTALL_DATA} scripts/util/stunnel-server.conf $(ROOT)$(PREFIX)/$(DOCS); fi
160 +       if [ "X$(DOCS)" != X ]; then ${BSD_INSTALL_MAN} README $(ROOT)$(PREFIX)/$(DOCS); fi
161  
162  
163  #internal use only, a test install:
164
165
166 [FILE:1641:patches/patch-vncstorepw_Makefile]
167 --- vncstorepw/Makefile.orig    2010-04-22 03:22:40 UTC
168 +++ vncstorepw/Makefile
169 @@ -7,21 +7,18 @@ UNWRAP = unwrap.so
170  LIMACC = lim_accept.so
171  ULTDSM = ultravnc_dsm_helper
172  
173 -# gcc must be used:
174 -CC = gcc
175  
176  all: $(CMD) $(UNWRAP) $(LIMACC) $(ULTDSM)
177  
178  $(CMD): vncauth.o vncstorepw.o d3des.o
179         PATH=$$PATH:$(EPATH) $(CC) -o $(CMD) vncstorepw.o vncauth.o d3des.o
180 -       PATH=$$PATH:$(EPATH) strip $(CMD)
181         @ls -l $(CMD)
182  
183  $(UNWRAP): unwrap.c
184         if [ `uname` = "Darwin" ]; then \
185                 PATH=$$PATH:$(EPATH) $(CC) -o $(UNWRAP) -dynamiclib -fPIC unwrap.c; \
186         else \
187 -               PATH=$$PATH:$(EPATH) $(CC) -o $(UNWRAP) -shared     -fPIC unwrap.c; \
188 +               PATH=$$PATH:$(EPATH) $(CC) -o $(UNWRAP) -shared     $(CFLAGS) -fPIC unwrap.c; \
189         fi
190         @ls -l $(UNWRAP)
191  
192 @@ -29,7 +26,7 @@ $(LIMACC): lim_accept.c
193         if [ `uname` = "Darwin" ]; then \
194                 PATH=$$PATH:$(EPATH) $(CC) -o $(LIMACC) -dynamiclib -fPIC -nostartfiles lim_accept.c; \
195         else \
196 -               PATH=$$PATH:$(EPATH) $(CC) -o $(LIMACC) -shared     -fPIC -nostartfiles lim_accept.c; \
197 +               PATH=$$PATH:$(EPATH) $(CC) -o $(LIMACC) -shared     $(CFLAGS) -fPIC -nostartfiles lim_accept.c; \
198         fi
199         @ls -l $(LIMACC)
200  
201 @@ -39,9 +36,8 @@ $(ULTDSM): ultravnc_dsm_helper.c
202         if [ `uname` = "SunOS" ]; then \
203                 PATH=$$PATH:$(EPATH) $(CC) -o $(ULTDSM) $(CPP_SSL) ultravnc_dsm_helper.c $(LD_SSL) -lssl -lcrypto -lsocket -lnsl; \
204         else \
205 -               PATH=$$PATH:$(EPATH) $(CC) -o $(ULTDSM) $(CPP_SSL) ultravnc_dsm_helper.c $(LD_SSL) -lssl -lcrypto; \
206 +               PATH=$$PATH:$(EPATH) $(CC) -o $(ULTDSM) $(CPP_SSL) ultravnc_dsm_helper.c $(CFLAGS) $(LDFLAGS) -lssl -lcrypto; \
207         fi
208 -       PATH=$$PATH:$(EPATH) strip $(ULTDSM)
209         @ls -l $(ULTDSM)
210  
211  test: $(CMD)
212
213
214 [FILE:7015:patches/patch-vncstorepw_ultravnc__dsm__helper.c]
215 --- vncstorepw/ultravnc_dsm_helper.c.orig       2010-04-23 04:29:43 UTC
216 +++ vncstorepw/ultravnc_dsm_helper.c
217 @@ -414,7 +414,9 @@ void enc_do(char *ciph, char *keyfile, c
218                 if (strstr(p, "md5+") == p) {
219                         Digest = EVP_md5();        p += strlen("md5+");
220                 } else if (strstr(p, "sha+") == p) {
221 -                       Digest = EVP_sha();        p += strlen("sha+");
222 +                       fprintf(stderr, "%s: obsolete hash algorithm: SHA-0\n",
223 +                           prog, s);
224 +                       exit(1);
225                 } else if (strstr(p, "sha1+") == p) {
226                         Digest = EVP_sha1();       p += strlen("sha1+");
227                 } else if (strstr(p, "ripe+") == p) {
228 @@ -655,8 +657,10 @@ static void enc_xfer(int sock_fr, int so
229          */
230         unsigned char E_keystr[EVP_MAX_KEY_LENGTH];
231         unsigned char D_keystr[EVP_MAX_KEY_LENGTH];
232 -       EVP_CIPHER_CTX E_ctx, D_ctx;
233 -       EVP_CIPHER_CTX *ctx = NULL;
234 +       //openssl1.1.patch - Do NOT create two context and only use one
235 +       // - that's silly.
236 +       //EVP_CIPHER_CTX *E_ctx, *D_ctx;
237 +       EVP_CIPHER_CTX *ctx;
238  
239         unsigned char buf[BSIZE], out[BSIZE];
240         unsigned char *psrc = NULL, *keystr;
241 @@ -698,11 +702,14 @@ static void enc_xfer(int sock_fr, int so
242         encsym = encrypt ? "+" : "-";
243  
244         /* use the encryption/decryption context variables below */
245 +       ctx = EVP_CIPHER_CTX_new();
246 +       if (!ctx) {
247 +           fprintf(stderr, "Failed to create encryption/decryption context.\n");
248 +           goto finished;
249 +       }
250         if (encrypt) {
251 -               ctx = &E_ctx;
252                 keystr = E_keystr;
253         } else {
254 -               ctx = &D_ctx;
255                 keystr = D_keystr;
256         }
257  
258 @@ -797,7 +804,6 @@ static void enc_xfer(int sock_fr, int so
259                 if (whoops) {
260                         fprintf(stderr, "%s: %s - WARNING: MSRC4 mode and IGNORING random salt\n", prog, encstr);
261                         fprintf(stderr, "%s: %s - WARNING: and initialization vector!!\n", prog, encstr);
262 -                       EVP_CIPHER_CTX_init(ctx);
263                         if (pw_in) {
264                             /* for pw=xxxx a md5 hash is used */
265                             EVP_BytesToKey(Cipher, Digest, NULL, (unsigned char *) keydata,
266 @@ -816,7 +822,6 @@ static void enc_xfer(int sock_fr, int so
267  
268                         EVP_BytesToKey(Cipher, Digest, NULL, (unsigned char *) keydata,
269                             keydata_len, 1, keystr, ivec); 
270 -                       EVP_CIPHER_CTX_init(ctx);
271                         EVP_CipherInit_ex(ctx, Cipher, NULL, keystr, ivec,
272                             encrypt);
273                 }
274 @@ -836,9 +841,9 @@ static void enc_xfer(int sock_fr, int so
275                         in_salt = salt;
276                 }
277  
278 -               if (ivec_size < Cipher->iv_len && !securevnc) {
279 +               if (ivec_size < EVP_CIPHER_iv_length(Cipher) && !securevnc) {
280                         fprintf(stderr, "%s: %s - WARNING: short IV %d < %d\n",
281 -                           prog, encstr, ivec_size, Cipher->iv_len);
282 +                           prog, encstr, ivec_size, EVP_CIPHER_iv_length(Cipher));
283                 }
284  
285                 /* make the hashed value and place in keystr */
286 @@ -877,9 +882,6 @@ static void enc_xfer(int sock_fr, int so
287                 }
288  
289  
290 -               /* initialize the context */
291 -               EVP_CIPHER_CTX_init(ctx);
292 -
293  
294                 /* set the cipher & initialize */
295  
296 @@ -986,6 +988,7 @@ static void enc_xfer(int sock_fr, int so
297         /* transfer done (viewer exited or some error) */
298         finished:
299  
300 +       if (ctx) EVP_CIPHER_CTX_free(ctx);
301         fprintf(stderr, "\n%s: %s - close sock_to\n", prog, encstr);
302         close(sock_to);
303  
304 @@ -1060,14 +1063,14 @@ static int securevnc_server_rsa_save_dia
305  }
306  
307  static char *rsa_md5_sum(unsigned char* rsabuf) {
308 -       EVP_MD_CTX md;
309 +       EVP_MD_CTX *md = EVP_MD_CTX_create();
310         char digest[EVP_MAX_MD_SIZE], tmp[16];
311         char md5str[EVP_MAX_MD_SIZE * 8];
312         unsigned int i, size = 0;
313  
314 -       EVP_DigestInit(&md, EVP_md5());
315 -       EVP_DigestUpdate(&md, rsabuf, SECUREVNC_RSA_PUBKEY_SIZE);
316 -       EVP_DigestFinal(&md, (unsigned char *)digest, &size);
317 +       EVP_DigestInit(md, EVP_md5());
318 +       EVP_DigestUpdate(md, rsabuf, SECUREVNC_RSA_PUBKEY_SIZE);
319 +       EVP_DigestFinal(md, (unsigned char *)digest, &size);
320  
321         memset(md5str, 0, sizeof(md5str));
322         for (i=0; i < size; i++) {
323 @@ -1075,6 +1078,7 @@ static char *rsa_md5_sum(unsigned char*
324                 sprintf(tmp, "%02x", (int) uc);
325                 strcat(md5str, tmp);
326         }
327 +       EVP_MD_CTX_destroy(md);
328         return strdup(md5str);
329  }
330  
331 @@ -1184,7 +1188,7 @@ static void sslexit(char *msg) {
332  
333  static void securevnc_setup(int conn1, int conn2) {
334         RSA *rsa = NULL;
335 -       EVP_CIPHER_CTX init_ctx;
336 +       EVP_CIPHER_CTX *init_ctx = EVP_CIPHER_CTX_new();
337         unsigned char keystr[EVP_MAX_KEY_LENGTH];
338         unsigned char *rsabuf, *rsasav;
339         unsigned char *encrypted_keybuf;
340 @@ -1203,6 +1207,8 @@ static void securevnc_setup(int conn1, i
341  
342         ERR_load_crypto_strings();
343  
344 +       if (!init_ctx) sslexit("securevnc_setup: EVP_CIPHER_CTX_new() failed");
345 +       
346         /* alloc and read from server the 270 comprising the rsa public key: */
347         rsabuf = (unsigned char *) calloc(SECUREVNC_RSA_PUBKEY_SIZE, 1);
348         rsasav = (unsigned char *) calloc(SECUREVNC_RSA_PUBKEY_SIZE, 1);
349 @@ -1323,8 +1329,7 @@ static void securevnc_setup(int conn1, i
350         /*
351          * Back to the work involving the tmp obscuring key:
352          */
353 -       EVP_CIPHER_CTX_init(&init_ctx);
354 -       rc = EVP_CipherInit_ex(&init_ctx, EVP_rc4(), NULL, initkey, NULL, 1);
355 +       rc = EVP_CipherInit_ex(init_ctx, EVP_rc4(), NULL, initkey, NULL, 1);
356         if (rc == 0) {
357                 sslexit("securevnc_setup: EVP_CipherInit_ex(init_ctx) failed");
358         }
359 @@ -1340,13 +1345,13 @@ static void securevnc_setup(int conn1, i
360         /* decode with the tmp key */
361         if (n > 0) {
362                 memset(to_viewer, 0, sizeof(to_viewer));
363 -               if (EVP_CipherUpdate(&init_ctx, to_viewer, &len, buf, n) == 0) {
364 +               if (EVP_CipherUpdate(init_ctx, to_viewer, &len, buf, n) == 0) {
365                         sslexit("securevnc_setup: EVP_CipherUpdate(init_ctx) failed");
366                         exit(1);
367                 }
368                 to_viewer_len = len;
369         }
370 -       EVP_CIPHER_CTX_cleanup(&init_ctx);
371 +       EVP_CIPHER_CTX_free(init_ctx);
372         free(initkey);
373  
374         /* print what we would send to the viewer (sent below): */
375 @@ -1407,7 +1412,7 @@ static void securevnc_setup(int conn1, i
376  
377         if (client_auth_req && client_auth) {
378                 RSA *client_rsa = load_client_auth(client_auth);
379 -               EVP_MD_CTX dctx;
380 +               EVP_MD_CTX *dctx = EVP_MD_CTX_create();
381                 unsigned char digest[EVP_MAX_MD_SIZE], *signature;
382                 unsigned int ndig = 0, nsig = 0;
383  
384 @@ -1421,8 +1426,8 @@ static void securevnc_setup(int conn1, i
385                         exit(1);
386                 }
387  
388 -               EVP_DigestInit(&dctx, EVP_sha1());
389 -               EVP_DigestUpdate(&dctx, keystr, SECUREVNC_KEY_SIZE);
390 +               EVP_DigestInit(dctx, EVP_sha1());
391 +               EVP_DigestUpdate(dctx, keystr, SECUREVNC_KEY_SIZE);
392                 /*
393                  * Without something like the following MITM is still possible.
394                  * This is because the MITM knows keystr and can use it with
395 @@ -1433,7 +1438,7 @@ static void securevnc_setup(int conn1, i
396                  * he doesn't have Viewer_ClientAuth.pkey.
397                  */
398                 if (0) {
399 -                       EVP_DigestUpdate(&dctx, rsasav, SECUREVNC_RSA_PUBKEY_SIZE);
400 +                       EVP_DigestUpdate(dctx, rsasav, SECUREVNC_RSA_PUBKEY_SIZE);
401                         if (!keystore_verified) {
402                                 fprintf(stderr, "securevnc_setup:\n");
403                                 fprintf(stderr, "securevnc_setup: Warning: even *WITH* Client Authentication in SecureVNC,\n");
404 @@ -1456,7 +1461,8 @@ static void securevnc_setup(int conn1, i
405                                 fprintf(stderr, "securevnc_setup:\n");
406                         }
407                 }
408 -               EVP_DigestFinal(&dctx, (unsigned char *)digest, &ndig);
409 +               EVP_DigestFinal(dctx, (unsigned char *)digest, &ndig);
410 +               EVP_MD_CTX_destroy(dctx);
411  
412                 signature = (unsigned char *) calloc(RSA_size(client_rsa), 1);
413                 RSA_sign(NID_sha1, digest, ndig, signature, &nsig, client_rsa);
414
415
416 [FILE:160:patches/patch-wr__tool]
417 --- wr_tool.orig        2008-08-29 12:58:03 UTC
418 +++ wr_tool
419 @@ -6,4 +6,4 @@ cat > $wr <<END
420  UNAME=.; export UNAME
421  exec $cmd "\$@"
422  END
423 -chmod 755 $wr
424 +chmod 555 $wr
425