{
struct json_object *priv, *pub, *id;
const char *strid;
- char *un = NULL;
size_t len;
/* create the application structure */
len = strlen(unitname);
assert(len >= (sizeof service_extension - 1));
assert(!memcmp(&unitname[len - (sizeof service_extension - 1)], service_extension, sizeof service_extension));
- if (unitname[len - sizeof service_extension] == '@') {
- char buffer[40];
- size_t l = (size_t)snprintf(buffer, sizeof buffer, "%d", (int)getuid());
- un = malloc(len + l + 1);
- if (!un)
- goto error;
- memcpy(&un[0], unitname, len - (sizeof service_extension - 1));
- if (l)
- memcpy(&un[len - (sizeof service_extension - 1)], buffer, l);
- memcpy(&un[len - (sizeof service_extension - 1) + l], service_extension, sizeof service_extension);
- }
/* adds the values */
if (add_fields_of_content(priv, pub, content, length)
|| add_field(priv, pub, key_unit_path, unitpath)
- || add_field(priv, pub, key_unit_name, un ? : unitname)
+ || add_field(priv, pub, key_unit_name, unitname)
|| add_field(priv, pub, key_unit_scope, isuser ? scope_user : scope_system))
goto error;
- free(un);
- un = NULL;
/* get the id */
if (!json_object_object_get_ex(pub, key_id, &id)) {
return 0;
error:
- free(un);
json_object_put(pub);
json_object_put(priv);
return -1;
/* read the file */
rc = getfile(path, content, length);
if (rc >= 0) {
- /* removes any comment and join lines */
+ /* removes any comment and join continued lines */
st = 0;
read = write = *content;
for (;;) {
break;
switch (st) {
case 0:
+ /* state 0: begin of a line */
if (c == ';' || c == '#') {
st = 3; /* removes lines starting with ; or # */
break;
st = 1;
/*@fallthrough@*/
case 1:
+ /* state 1: emitting a normal line */
if (c == '\\')
st = 2;
else {
}
break;
case 2:
+ /* state 2: character after '\' */
if (c == '\n')
c = ' ';
else
*write++ = '\\';
goto enter_state_1;
case 3:
+ /* state 3: inside a comment, wait its end */
if (c == '\n')
st = 0;
break;
* 'json_object_put'.
* Returns NULL in case of error.
*/
-struct json_object *afm_udb_applications_private(struct afm_udb *afudb)
+struct json_object *afm_udb_applications_private(struct afm_udb *afudb, int uid)
{
return json_object_get(afudb->applications.prvarr);
}
* 'json_object_put'.
* Returns NULL in case of error.
*/
-struct json_object *afm_udb_applications_public(struct afm_udb *afudb)
+struct json_object *afm_udb_applications_public(struct afm_udb *afudb, int uid)
{
return json_object_get(afudb->applications.pubarr);
}
* It returns a JSON-object that must be released using 'json_object_put'.
* Returns NULL in case of error.
*/
-static struct json_object *get_no_case(struct json_object *object, const char *id)
+static struct json_object *get_no_case(struct json_object *object, const char *id, int uid)
{
struct json_object *result;
struct json_object_iter i;
* It returns a JSON-object that must be released using 'json_object_put'.
* Returns NULL in case of error.
*/
-struct json_object *afm_udb_get_application_private(struct afm_udb *afudb, const char *id)
+struct json_object *afm_udb_get_application_private(struct afm_udb *afudb, const char *id, int uid)
{
- return get_no_case(afudb->applications.prvobj, id);
+ return get_no_case(afudb->applications.prvobj, id, uid);
}
/*
* Returns NULL in case of error.
*/
struct json_object *afm_udb_get_application_public(struct afm_udb *afudb,
- const char *id)
+ const char *id, int uid)
{
- return get_no_case(afudb->applications.pubobj, id);
+ return get_no_case(afudb->applications.pubobj, id, uid);
}