Results 1 to 1 of 1

Thread: libsecret not working with user account space for ubuntu2004

  1. #1
    Join Date
    Jan 2021
    Beans
    1

    libsecret not working with user account space for ubuntu2004

    I am using libsecret library and facing problem with ubuntu2004 gnome-keyring
    I have written below cpp code

    #include<libsecret/secret.h>
    #include<iostream>
    #include<time.h>
    #defineSCHEMAgetSchema()
    #defineCREDENTIALS_TOKEN_LABEL"ubuntu2004test"


    constSecretSchema*getSchema(void)
    {

    staticconst SecretSchema schema = {
    "org.example.credentials",
    SECRET_SCHEMA_NONE,
    {
    {"username", SECRET_SCHEMA_ATTRIBUTE_STRING},
    {NULL, (SecretSchemaAttributeType)0}}};

    return &schema;
    }

    voidputCredentials(std::stringusername,std::stringpassword)
    {
    GError *error = NULL;
    secret_password_store_sync(SCHEMA, SECRET_COLLECTION_DEFAULT, CREDENTIALS_TOKEN_LABEL, password.c_str(), NULL,
    &error, "username",username.c_str(),NULL);
    }
    voiddeleteAllCredentials(){
    std::cout<<"\nDeletting all credential....\n";
    GError *error = NULL;
    SecretService *sec = secret_service_get_sync(SECRET_SERVICE_LOAD_COLLECTIONS, NULL, &error);
    _SecretCollection *collection = NULL;

    collection = secret_collection_for_alias_sync(sec, SECRET_COLLECTION_DEFAULT,
    SECRET_COLLECTION_LOAD_ITEMS, NULL, &error);
    GList *items = secret_collection_get_items(collection);
    for (unsignedinti = 0; i < g_list_length(items); i++)
    {
    SecretItem *item = (SecretItem *)g_list_nth_data(items, i);
    std::stringlabel(secret_item_get_label(item));
    if (label==CREDENTIALS_TOKEN_LABEL)
    {
    secret_item_delete_sync(item, NULL, &error);
    if (error != NULL)
    {
    std::cout<<"Error: Cannot delete item:"<<error->message;
    }
    }
    g_object_unref(item);
    }
    g_list_free(items);
    std::cout<<"...All credentials deleted...";
    }

    intmain()
    {
    std::cout<<"Adding tokens";
    std::cout<<"\nEnter new username or type exit :";
    std::stringusername[] = {"user1", "user2", "user3", "user4", "user5", "user6"};
    std::stringpassword[] = {"pass1", "pass2", "pass3", "pass4", "pass5", "pass6"};

    for (inti = 0; i < 6; i++)
    {
    std::cout<<"Adding credentials....\n";
    std::cout<<username[i]<<std::endl;
    std::cout<<password[i]<<std::endl;
    putCredentials(username[i], password[i]);
    sleep(3);
    }
    deleteAllCredentials();
    return0;
    }



    And I compile it using
    g++ ubuntu2004-libsecret.cpp -o test `pkg-config --cflags --libs glib-2.0 libsecret-1`

    I have below shell script
    #!/bin/bash
    location="/home/avinash/Documents/training/"
    EXE_CMD=$location"test"
    echo$EXE_CMD
    if [ `whoami` = "root" ]
    then
    echo"adding in user account: "`logname`
    runuser -l `logname` -c "$EXE_CMD 2>/dev/null"
    else
    $EXE_CMD 2>/dev/null

    fi




    I get below results "sh ./
    Ubuntu 1804: users added and removed in user account ,with and without sudo
    Ubuntu 2004: users added and removed in user account only without sudo, sudo run does not add and remove credentials to user account here.

    Any help for ubuntu2004 will be appreciated.
    Attached Files Attached Files

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •