int main()

in src/authorized_principals/authorized_principals.cc [43:95]


int main(int argc, char* argv[]) {
  size_t fp_len;
  char *user_name, *cert, *fingerprint;
  struct sigaction sig;
  struct AuthOptions opts;
  string user_response;
  const char *progname = FileName(argv[0]);

  fp_len = 0;
  opts = {};
  user_name = cert = fingerprint = NULL;

  SetupSysLog(SYSLOG_IDENT, progname);

  if (argc != 3) {
    SysLogErr("usage: %s [username] [base64-encoded cert]", progname);
    goto fail;
  }

  sig = {};
  sig.sa_handler = signal_handler;
  sigemptyset(&sig.sa_mask);

  if (sigaction(SIGPIPE, &sig, NULL) == -1) {
    SysLogErr("Unable to initialize signal handler. Exiting.");
    goto fail;
  }

  user_name = argv[1];
  cert = argv[2];

  fp_len = FingerPrintFromBlob(cert, &fingerprint);
  if (fp_len == 0) {
    SysLogErr("Could not extract/parse fingerprint from certificate.");
    goto fail;
  }

  opts.fingerprint = fingerprint;
  opts.fp_len = fp_len;

  if (AuthorizeUser(user_name, opts, &user_response)) {
    cout << user_name << endl;
  }

  free(fingerprint);
  CloseSysLog();

  return SUCCESS;

fail:
  CloseSysLog();
  return FAIL;
}