Skip to content
Snippets Groups Projects
Commit 133265fd authored by Arie Peterson's avatar Arie Peterson
Browse files

Resolve discussions

parent 1d9be6ba
No related branches found
No related tags found
No related merge requests found
/**
* Callback function that lists the current ssh keys authorised for access
* to the initrd.
* @param[in] request incoming HTTP request
* @param[out] response HTTP response to the request
* @param[in] user_data extra data to pass between main thread and callbacks
* @return internal status code
* Read the authorized_keys file of the initrd, and put its lines in a json
* array.
* @return json array of authorized_keys
*/
int callback_ssh_keys_get(const struct _u_request * request,
struct _u_response * response, void * user_data)
json_t * readAuthorizedKeysJSON()
{
FILE * authorized_keys;
char * line = NULL;
size_t line_length = 0;
ssize_t read;
json_t * keys = json_object();
// Open file.
authorized_keys = fopen("/root/.ssh/authorized_keys", "r");
FILE * authorized_keys = fopen(AUTHORIZED_KEYS_PATH, "r");
// Check if that succeeded.
if (authorized_keys == NULL)
{
printf("Could not open authorized_keys file\n");
return send_simple_response(response, 500, "error",
"error reading authorized_keys");
return NULL;
}
// Read file line by line.
int index = 0;
int index = 1;
char * field;
char * line = NULL;
size_t line_length = 0;
ssize_t read;
while ((read = getline(&line, &line_length, authorized_keys)) != -1)
{
// Remove trailing newline.
asprintf(&field, "%d", index);
// Remove trailing newline.
line[strcspn(line, "\n")] = 0;
json_object_set(keys, field, json_string(line));
++index;
......@@ -45,6 +37,39 @@ int callback_ssh_keys_get(const struct _u_request * request,
free(line);
}
return keys;
}
/**
* Callback function that lists the current ssh keys authorised for access
* to the initrd.
*
* Example output:
* {"ssh-keys":{"1":"ssh-rsa AAAAB3... example@example.com",
* "2":"ssh-rsa AAAAB3...","5":"command=\"/usr/bin/cryptops-client\" ssh-rsa
* AAAAB3... cryptops-test@greenhost"}}
*
* The indices correspond to line numbers of the authorized_keys file.
* Missing indices (like 3 and 4 in the example) arise from empty lines in the
* file; those are creted when keys are deleted.
*
* @param[in] request incoming HTTP request
* @param[out] response HTTP response to the request
* @param[in] user_data extra data to pass between main thread and callbacks
* @return internal status code
*/
int callback_ssh_keys_get(const struct _u_request * request,
struct _u_response * response, void * user_data)
{
// Read lines of authorized_keys file into json array.
json_t * keys = readAuthorizedKeysJSON();
if (keys == NULL)
{
printf("Could not open authorized_keys file\n");
return send_simple_response(response, 500, "error",
"error reading authorized_keys");
}
// Create json response.
json_t * json_body = NULL;
json_body = json_object();
......
......@@ -8,3 +8,5 @@
#define UNENCRYPTED_MOUNTPOINT "/tmp/mnt-plain"
#define ENCRYPTED_MOUNTPOINT "/tmp/mnt-encrypted"
#define TMP_LOCATION "/tmp/" MAPPED_DEVICE_NAME
#define AUTHORIZED_KEYS_DIR "/root/.ssh"
#define AUTHORIZED_KEYS_PATH AUTHORIZED_KEYS_DIR "/authorized_keys"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment