[net.sources] Crypt program - mods.

philip@axis.UUCP (02/18/87)

In the crypt program I recently posted, there was a call made to a
small program "/usr/lib/makekey". Apparently this does not exist on all
*IX* machines.

I really dont see why - it is a 4 or 5 line program which reads a
password on its stdin, and prints the encrypted result on its stdout,
using exactly the same routines as passwd does.

Rather than re-write the program, I have made some mods to the crypt source
to make the calls directly.

Since the library routine is called 'crypt', the routine within my program
has to change its name, 'encrypt' is also used in the library, so the
final name change is to 'encode'.

The following is a diff of the changes required (actually, the source becomes
smaller and simpler .... )

============================================================================

19a20
> 	char		*crypt();
22d22
< 	int		pipe_fd[2];
25c25,27
< 	char		buf[13];
---
> 	char		buf[14];
> 	char		key[9];
> 	char		salt[3];
27,30c29,32
< 	strncpy(buf, password, 8);
< 	while (*password) *password++ = '\0';
< 	buf[8] = buf[0];
< 	buf[9] = buf[1];
---
> 	strncpy(key, password, 8);
> 	salt[0] = key[0];
> 	salt[1] = key[1];
> 	salt[2] = '\0';
32c34
< 	pipe(pipe_fd);
---
> 	strncpy(buf, crypt(key, salt), 13);
34,53d35
< 	if (fork() == 0)
< 	{
< 		close(0);
< 		close(1);
< 		dup(pipe_fd[0]);
< 		dup(pipe_fd[1]);
< 		execl("/usr/lib/makekey", "-", 0);
< 		execl("/lib/makekey", "-", 0);
< 		exit(1);
< 	}
< 
< 	write(pipe_fd[1], buf, 10);
< 	wait((int *) NULL);
< 
< 	if (read(pipe_fd[0], buf, 13) != 13)
< 	{
< 		fprintf(stderr, "crypt: cannot generate key\n");
< 		exit(1);
< 	}
< 
119c101
< crypt()
---
> encode()
202c184
< 	else      crypt();
---
> 	else      encode();