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;
}