#include <stdio.h>

#include "AFS.h"

#define MAXACL 256

int
main(int argc, char **argv)
{
  struct ViceIoctl parms;
  char acl[MAXACL];
  int rights;

#ifndef pigs_had_wings
  fprintf(stderr, "Warning: This an example program similar to fs setacl -clear\n");
  fprintf(stderr, "Use only on test directories!\n");
#endif

  if (argc != 4)
    {
      fprintf(stderr, "Usage: setacl dir user rights\n");
      exit(1);
    }

  {
    char *t = argv[3];
    rights = 0;
    for (; *t; t++)
      switch (*t) {
      case 'r':
	rights |= PRSFS_READ;
	break;
      case 'w':
	rights |= PRSFS_WRITE;
	break;
      case 'i':
	rights |= PRSFS_INSERT;
	break;
      case 'l':
	rights |= PRSFS_LOOKUP;
	break;
      case 'd':
	rights |= PRSFS_DELETE;
	break;
      case 'k':
	rights |= PRSFS_LOCK;
	break;
      case 'a':
	rights |= PRSFS_ADMINISTER;
	break;
      default:
	fprintf(stderr, "illegal right '%c'\n", *t);
	exit(1);
	break;
      }
  }

  parms.out = 0;
  parms.out_size = 0;
  parms.in = acl;
  parms.in_size = MAXACL;
  sprintf(acl,
	  "%d\n%d\n"		/* header */
	  "%s\t%d\n",		/* acl pair */
	  1,			/* 1 positive entry */
	  0,			/* no negative entries */
	  argv[2],
	  rights);
  if (pioctl(argv[1], VIOCSETAL, &parms, 1) == -1)
    {
      perror("pioctl failed");
      exit(1);
    }
  exit(0);
}
