Re: cksum(1) patch

2009-05-13 Thread Stuart Henderson
On 2009/05/13 10:40, Otto Moerbeek wrote:
  
  I did some research on different operating systems regarding checksumming 
  and
  found that solaris had a nice option called digest -l which prints the
  available algorithms and exits.  I wrote this functionality into cksum(1) 
  that you can have if you want it.  Patch follows.
  
  -peter
 
 I kinda like this, but comments inline.

it might be nice to display the list of algorithms when an unsupported
algorithm is chosen, e.g.

$ cksum -a foo
cksum: unknown algorithm foo, available algorithms:
cksum, md4, md5, rmd160, sha1, sha256, sha384, sha512, sum, sysvsum.
usage: cksum [-bpqrtx] [-a algorithms] [-c [checklist ...]] [-o 1 | 2]
 [-s string] [file ...]



Re: cksum(1) patch

2009-05-13 Thread Peter J. Philipp
On Wed, May 13, 2009 at 10:40:13AM +0200, Otto Moerbeek wrote:
 Come to think of it, why don't you just putchar(tolower(hf-name[i]))
 in a loop? Saves you the calloc and error handling.
 
 Also, don't forget to fix usage().
 
   -Otto

Yeah, thanks.  Well I got good and critical feedback and Otto's prodding was 
good enough to make me rewrite this puny patch.  Gone are errno, calloc() and 
in is the putchar().  I stayed away from adding sthen's idea, perhaps he can do 
the patch for that.  Patch follows:


? cksum.1-orig
? cksum.patch
? md5.c-orig
Index: cksum.1
===
RCS file: /cvs/src/bin/md5/cksum.1,v
retrieving revision 1.19
diff -u -r1.19 cksum.1
--- cksum.1 8 Feb 2009 17:15:09 -   1.19
+++ cksum.1 13 May 2009 10:03:46 -
@@ -42,7 +42,7 @@
 .Sh SYNOPSIS
 .Nm cksum
 .Bk -words
-.Op Fl bpqrtx
+.Op Fl blpqrtx
 .Op Fl a Ar algorithms
 .Op Fl c Op Ar checklist ...
 .Op Fl o Ar 1 | 2
@@ -162,6 +162,8 @@
 option may not be used in conjunction with more than a single
 .Fl a
 option.
+.It Fl l
+outputs the algorithms available and exits.
 .It Fl o Ar 1 | 2
 Use historic algorithms instead of the (superior) default one
 (see below).
Index: md5.c
===
RCS file: /cvs/src/bin/md5/md5.c,v
retrieving revision 1.50
diff -u -r1.50 md5.c
--- md5.c   6 Sep 2008 12:01:34 -   1.50
+++ md5.c   13 May 2009 10:03:46 -
@@ -210,14 +210,14 @@
struct hash_list hl;
size_t len;
char *cp, *input_string;
-   int fl, error, base64;
+   int fl, error, base64, i;
int bflag, cflag, pflag, rflag, tflag, xflag;
 
static const char *optstr[5] = {
bcpqrs:tx,
bcpqrs:tx,
bcpqrs:tx,
-   a:bco:pqrs:tx,
+   a:bco:lpqrs:tx,
a:bco:pqrs:tx
};
 
@@ -315,6 +315,15 @@
if (hftmp == TAILQ_END(hl))
hash_insert(hl, hf, 0);
break;
+   case 'l':
+   for (hf = functions; hf-name != NULL; hf++) {
+   len = strlen(hf-name);
+   for (i = 0; i  len; i++) {
+   putchar(tolower(hf-name[i]));
+   }   
+   putchar('\n');
+   }
+   exit(0);
case 'p':
pflag = 1;
break;



Re: cksum(1) patch

2009-05-13 Thread Peter J. Philipp
On Wed, May 13, 2009 at 12:20:44PM +0200, Otto Moerbeek wrote:
 You forgot to fix usage(). Also, I think it makes sense to allow -l
 for sum(1) too, so that both commands that take -a also take -l. 
 
   -Otto

Eeek.  Ok this will do then:

Regards,
-p


? cksum.1-orig
? cksum.patch
? md5.c-orig
Index: cksum.1
===
RCS file: /cvs/src/bin/md5/cksum.1,v
retrieving revision 1.19
diff -u -r1.19 cksum.1
--- cksum.1 8 Feb 2009 17:15:09 -   1.19
+++ cksum.1 13 May 2009 11:27:53 -
@@ -42,7 +42,7 @@
 .Sh SYNOPSIS
 .Nm cksum
 .Bk -words
-.Op Fl bpqrtx
+.Op Fl blpqrtx
 .Op Fl a Ar algorithms
 .Op Fl c Op Ar checklist ...
 .Op Fl o Ar 1 | 2
@@ -50,7 +50,7 @@
 .Op Ar file ...
 .Ek
 .Nm sum
-.Op Fl bpqrtx
+.Op Fl blpqrtx
 .Op Fl a Ar algorithms
 .Op Fl c Op Ar checklist ...
 .Op Fl o Ar 1 | 2
@@ -162,6 +162,8 @@
 option may not be used in conjunction with more than a single
 .Fl a
 option.
+.It Fl l
+outputs the algorithms available and exits.
 .It Fl o Ar 1 | 2
 Use historic algorithms instead of the (superior) default one
 (see below).
Index: md5.c
===
RCS file: /cvs/src/bin/md5/md5.c,v
retrieving revision 1.50
diff -u -r1.50 md5.c
--- md5.c   6 Sep 2008 12:01:34 -   1.50
+++ md5.c   13 May 2009 11:27:53 -
@@ -210,15 +210,15 @@
struct hash_list hl;
size_t len;
char *cp, *input_string;
-   int fl, error, base64;
+   int fl, error, base64, i;
int bflag, cflag, pflag, rflag, tflag, xflag;
 
static const char *optstr[5] = {
bcpqrs:tx,
bcpqrs:tx,
bcpqrs:tx,
-   a:bco:pqrs:tx,
-   a:bco:pqrs:tx
+   a:bco:lpqrs:tx,
+   a:bco:lpqrs:tx
};
 
TAILQ_INIT(hl);
@@ -315,6 +315,15 @@
if (hftmp == TAILQ_END(hl))
hash_insert(hl, hf, 0);
break;
+   case 'l':
+   for (hf = functions; hf-name != NULL; hf++) {
+   len = strlen(hf-name);
+   for (i = 0; i  len; i++) {
+   putchar(tolower(hf-name[i]));
+   }   
+   putchar('\n');
+   }
+   exit(0);
case 'p':
pflag = 1;
break;
@@ -794,7 +803,7 @@
break;
case MODE_CKSUM:
case MODE_SUM:
-   fprintf(stderr, usage: %s [-bpqrtx] [-a algorithms] 
+   fprintf(stderr, usage: %s [-blpqrtx] [-a algorithms] 
[-c [checklist ...]] [-o 1 | 2]\n
   %*s [-s string] [file ...]\n,
__progname, (int)strlen(__progname), );



Re: cksum(1) patch

2009-05-13 Thread Otto Moerbeek
On Wed, May 13, 2009 at 02:16:49PM +0200, Mark Kettenis wrote:

  Date: Wed, 13 May 2009 12:20:44 +0200
  From: Otto Moerbeek o...@drijf.net
  
  On Wed, May 13, 2009 at 12:11:35PM +0200, Peter J. Philipp wrote:
  
   On Wed, May 13, 2009 at 10:40:13AM +0200, Otto Moerbeek wrote:
Come to think of it, why don't you just putchar(tolower(hf-name[i]))
in a loop? Saves you the calloc and error handling.

Also, don't forget to fix usage().

-Otto
   
   Yeah, thanks.  Well I got good and critical feedback and Otto's prodding 
   was 
   good enough to make me rewrite this puny patch.  Gone are errno, calloc() 
   and 
   in is the putchar().  I stayed away from adding sthen's idea, perhaps he 
   can do 
   the patch for that.  Patch follows:
  
  You forgot to fix usage(). Also, I think it makes sense to allow -l
  for sum(1) too, so that both commands that take -a also take -l. 
 
 That may be true, but I'm fairly certain that we will not add the -l
 option to either cksum(1) or sum(1).  It's not defined by POSIX, nor
 is it commonly available on other Unix-like systems.  Our goal is to
 not introduce non-standard options since people will start using them
 in scripts that will become unportable.

in the case of sum(1) and chsum(1) we aready deviate a lot. Posix does
not define any options for cksum(1) and does not define sum(1) at all.
We accept about a dozen options to both.

And I seem to remember the diff was inspired by Solaris.

-Otto



Re: cksum(1) patch

2009-05-13 Thread Peter J. Philipp
  And I seem to remember the diff was inspired by Solaris.
 
 $ uname -a
 SunOS foo 5.10 Generic_127128-11 i86pc i386 i86pc
 $ cksum -l
 cksum: illegal option -- l
 Usage: cksum [file ...]

It was inspired by digest(1) not cksum.

sycorax$ uname -a
SunOS sycorax 5.10 Generic_137138-09 i86pc i386 i86pc
sycorax$ digest -l
sha1
md5
sha256
sha384
sha512
sycorax$ 

Regards,

-peter



Re: cksum(1) patch

2009-05-13 Thread Otto Moerbeek
On Wed, May 13, 2009 at 03:18:05PM +0200, Mark Kettenis wrote:

  Date: Wed, 13 May 2009 14:28:06 +0200
  From: Otto Moerbeek o...@drijf.net
  
  On Wed, May 13, 2009 at 02:16:49PM +0200, Mark Kettenis wrote:
  
Date: Wed, 13 May 2009 12:20:44 +0200
From: Otto Moerbeek o...@drijf.net

On Wed, May 13, 2009 at 12:11:35PM +0200, Peter J. Philipp wrote:

 On Wed, May 13, 2009 at 10:40:13AM +0200, Otto Moerbeek wrote:
  Come to think of it, why don't you just 
  putchar(tolower(hf-name[i]))
  in a loop? Saves you the calloc and error handling.
  
  Also, don't forget to fix usage().
  
  -Otto
 
 Yeah, thanks.  Well I got good and critical feedback and Otto's 
 prodding was 
 good enough to make me rewrite this puny patch.  Gone are errno, 
 calloc() and 
 in is the putchar().  I stayed away from adding sthen's idea, perhaps 
 he can do 
 the patch for that.  Patch follows:

You forgot to fix usage(). Also, I think it makes sense to allow -l
for sum(1) too, so that both commands that take -a also take -l. 
   
   That may be true, but I'm fairly certain that we will not add the -l
   option to either cksum(1) or sum(1).  It's not defined by POSIX, nor
   is it commonly available on other Unix-like systems.  Our goal is to
   not introduce non-standard options since people will start using them
   in scripts that will become unportable.
  
  in the case of sum(1) and chsum(1) we aready deviate a lot. Posix does
  not define any options for cksum(1) and does not define sum(1) at all.
  We accept about a dozen options to both.
 
 I'm afraid, that's not an excuse for adding even more options.
 
  And I seem to remember the diff was inspired by Solaris.
 
 $ uname -a
 SunOS foo 5.10 Generic_127128-11 i86pc i386 i86pc
 $ cksum -l
 cksum: illegal option -- l
 Usage: cksum [file ...]

It was the digest(1) command on solaris, i remembered that wrong.

Anyway, my point is that the cksum(1) already has a bunch of options
but also an obviously missing one. But an alternative would be to do what
sthen suggested and put the algorithm list into the usage and only
that. 

-Otto



Re: cksum(1) patch

2009-05-13 Thread Jacek Masiulaniec
On Wed, May 13, 2009 at 03:28:04PM +0200, Otto Moerbeek wrote:
 Anyway, my point is that the cksum(1) already has a bunch of options
 but also an obviously missing one. But an alternative would be to do what
 sthen suggested and put the algorithm list into the usage and only
 that. 

I like this.



Re: cksum(1) patch

2009-05-12 Thread Hyjial Irldar
``man 1 cksum'' already does that for you.

2009/5/11 Peter J. Philipp p...@solarscale.de:
 Hi,

 I did some research on different operating systems regarding checksumming and
 found that solaris had a nice option called digest -l which prints the
 available algorithms and exits. B I wrote this functionality into cksum(1)
 that you can have if you want it. B Patch follows.

 -peter


 ? cksum.1-orig
 ? cksum.patch
 ? md5.c-orig
 Index: cksum.1
 ===
 RCS file: /cvs/src/bin/md5/cksum.1,v
 retrieving revision 1.19
 diff -u -r1.19 cksum.1
 --- cksum.1 B  B  8 Feb 2009 17:15:09 - B  B  B  1.19
 +++ cksum.1 B  B  11 May 2009 08:07:36 -
 @@ -42,7 +42,7 @@
 B .Sh SYNOPSIS
 B .Nm cksum
 B .Bk -words
 -.Op Fl bpqrtx
 +.Op Fl blpqrtx
 B .Op Fl a Ar algorithms
 B .Op Fl c Op Ar checklist ...
 B .Op Fl o Ar 1 | 2
 @@ -162,6 +162,8 @@
 B option may not be used in conjunction with more than a single
 B .Fl a
 B option.
 +.It Fl l
 +outputs the algorithms available and exits.
 B .It Fl o Ar 1 | 2
 B Use historic algorithms instead of the (superior) default one
 B (see below).
 Index: md5.c
 ===
 RCS file: /cvs/src/bin/md5/md5.c,v
 retrieving revision 1.50
 diff -u -r1.50 md5.c
 --- md5.c B  B  B  6 Sep 2008 12:01:34 - B  B  B  1.50
 +++ md5.c B  B  B  11 May 2009 08:07:36 -
 @@ -201,6 +201,7 @@
 B void usage(void) __attribute__((__noreturn__));

 B extern char *__progname;
 +extern int errno;
 B int qflag = 0;

 B int
 @@ -210,14 +211,14 @@
 B  B  B  B struct hash_list hl;
 B  B  B  B size_t len;
 B  B  B  B char *cp, *input_string;
 - B  B  B  int fl, error, base64;
 + B  B  B  int fl, error, base64, i;
 B  B  B  B int bflag, cflag, pflag, rflag, tflag, xflag;

 B  B  B  B static const char *optstr[5] = {
 B  B  B  B  B  B  B  B bcpqrs:tx,
 B  B  B  B  B  B  B  B bcpqrs:tx,
 B  B  B  B  B  B  B  B bcpqrs:tx,
 - B  B  B  B  B  B  B  a:bco:pqrs:tx,
 + B  B  B  B  B  B  B  a:bco:lpqrs:tx,
 B  B  B  B  B  B  B  B a:bco:pqrs:tx
 B  B  B  B };

 @@ -315,6 +316,20 @@
 B  B  B  B  B  B  B  B  B  B  B  B if (hftmp == TAILQ_END(hl))
 B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B hash_insert(hl, hf, 0);
 B  B  B  B  B  B  B  B  B  B  B  B break;
 + B  B  B  B  B  B  B  case 'l':
 + B  B  B  B  B  B  B  B  B  B  B  for (hf = functions; hf-name != NULL; 
 hf++) {
 + B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  len = strlen(hf-name);
 + B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  if ((cp = calloc(1, len + 1)) 
 == NULL)
 + B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  errx(1, malloc: 
 %s, strerror(errno));
 +
 + B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  for (i = 0; i  len; i++) {
 + B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  cp[i] = 
 tolower(*(hf-name + i));
 + B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  }
 +
 + B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  printf(%s\n, cp);
 + B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  free(cp);
 + B  B  B  B  B  B  B  B  B  B  B  }
 + B  B  B  B  B  B  B  B  B  B  B  exit(0);
 B  B  B  B  B  B  B  B case 'p':
 B  B  B  B  B  B  B  B  B  B  B  B pflag = 1;
 B  B  B  B  B  B  B  B  B  B  B  B break;