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