/* * $Id: radexample.c,v 1.8 2007/07/11 17:29:30 cparker Exp $ * * Copyright (C) 1995,1996,1997 Lars Fenneberg * * See the file COPYRIGHT for the respective terms and conditions. * If the file is missing contact me at lf@elemental.net * and I'll send you a copy. * */ static char rcsid[] = "$Id: radexample.c,v 1.8 2007/07/11 17:29:30 cparker Exp $"; #include #include #include #include static char *pname = NULL; int main (int argc, char **argv) { int result; char username[128]; char passwd[AUTH_PASS_LEN + 1]; VALUE_PAIR *send, *received; uint32_t service; char msg[PW_MAX_MSG_SIZE], username_realm[256]; char *default_realm; rc_handle *rh; pname = (pname = strrchr(argv[0],'/'))?pname+1:argv[0]; rc_openlog(pname); if ((rh = rc_read_config(RC_CONFIG_FILE)) == NULL) return ERROR_RC; if (rc_read_dictionary(rh, rc_conf_str(rh, "dictionary")) != 0) return ERROR_RC; default_realm = rc_conf_str(rh, "default_realm"); strncpy(username, rc_getstr (rh, "login: ",1), sizeof(username)); strncpy (passwd, rc_getstr(rh, "Password: ",0), sizeof (passwd)); send = NULL; /* * Fill in User-Name */ strncpy(username_realm, username, sizeof(username_realm)); /* Append default realm */ if ((strchr(username_realm, '@') == NULL) && default_realm && (*default_realm != '\0')) { strncat(username_realm, "@", sizeof(username_realm)-strlen(username_realm)-1); strncat(username_realm, default_realm, sizeof(username_realm)-strlen(username_realm)-1); } if (rc_avpair_add(rh, &send, PW_USER_NAME, username_realm, -1, 0) == NULL) return ERROR_RC; /* * Fill in User-Password */ if (rc_avpair_add(rh, &send, PW_USER_PASSWORD, passwd, -1, 0) == NULL) return ERROR_RC; /* * Fill in Service-Type */ service = PW_AUTHENTICATE_ONLY; if (rc_avpair_add(rh, &send, PW_SERVICE_TYPE, &service, -1, 0) == NULL) return ERROR_RC; result = rc_auth(rh, 0, send, &received, msg); if (result == OK_RC) { fprintf(stderr, "\"%s\" RADIUS Authentication OK\n", username); } else { fprintf(stderr, "\"%s\" RADIUS Authentication failure (RC=%i)\n", username, result); } return result; }