Ejemplo n.º 1
0
void op_edit (GList *filelist, char *path) {
	char *fullpath;
	char *editor;
	char *command;
	
	fullpath = file_fullpath(path, filelist->data);
	
	/* Check if editor defined */
	if ((editor = config_find_value(config_nimf, "editor", NULL)) == NULL) {
		dialog_error ("No editor is assigned.");
		return;
	}
	
	command = malloc (sizeof(char) * (strlen(editor) + strlen(fullpath) + 2));
	sprintf (command, editor, fullpath);
	
	system (command); /* Yikes! */
	
	free (command);
	free (fullpath);
}
Ejemplo n.º 2
0
gchar * pkey_manage_ask_password ()
{
    gchar *password = NULL;
    gchar *pass;
    gboolean is_key_ok;

    if (! ca_file_is_password_protected())
        return NULL;

    is_key_ok = FALSE;

    while (! is_key_ok) {

        if (password) {
            g_free (password);
            password = NULL;
        }

        printf (_("This action requires using one or more private keys saved in the database.\n"));
        pass = getpass (_("Please insert the database password:"******"The given password doesn't match the one used in the database"));
        }

    }


    return password;
}
Ejemplo n.º 3
0
gchar * pkey_manage_ask_password ()
{
    gchar *password = NULL;
    gboolean is_key_ok;
    gboolean remember = 0;
    GObject * widget = NULL, * password_widget = NULL, *remember_password_widget = NULL;
    GtkBuilder * dialog_gtkb = NULL;
    gint response = 0;

    if (! ca_file_is_password_protected())
        return NULL;
    dialog_gtkb = gtk_builder_new();
    gtk_builder_add_from_file (dialog_gtkb,
                               g_build_filename (PACKAGE_DATA_DIR, "gnomint", "get_db_password_dialog.ui", NULL),
                               NULL);
    gtk_builder_connect_signals (dialog_gtkb, NULL);

    password_widget = gtk_builder_get_object (dialog_gtkb, "cadb_password_entry");
    remember_password_widget = gtk_builder_get_object (dialog_gtkb, "remember_password_checkbutton");
    widget = gtk_builder_get_object (dialog_gtkb, "cadb_password_dialog_ok_button");

    is_key_ok = FALSE;

    if (saved_password && ca_file_check_password (saved_password)) {
        is_key_ok = TRUE;
        password = g_strdup (saved_password);
    }

    while (! is_key_ok) {
        gtk_widget_grab_focus (GTK_WIDGET(password_widget));

        if (password) {
            g_free (password);
            password = NULL;
        }


        widget = gtk_builder_get_object (dialog_gtkb, "get_db_password_dialog");
        response = gtk_dialog_run(GTK_DIALOG(widget));

        if (!response) {
            gtk_widget_destroy (GTK_WIDGET(widget));
            g_object_unref (G_OBJECT(dialog_gtkb));
            return NULL;
        } else {
            password = g_strdup ((gchar *) gtk_entry_get_text (GTK_ENTRY(password_widget)));
            remember = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(remember_password_widget));
        }

        is_key_ok = ca_file_check_password (password);

        if (! is_key_ok) {
            dialog_error (_("The given password doesn't match the one used in the database"));
        }

    }

    if (remember) {
        if (saved_password)
            g_free (saved_password);

        saved_password = g_strdup(password);
    }

    widget = gtk_builder_get_object (dialog_gtkb, "get_db_password_dialog");
    gtk_widget_destroy (GTK_WIDGET(widget));
    g_object_unref (G_OBJECT(dialog_gtkb));


    return password;
}
Ejemplo n.º 4
0
gchar * __pkey_retrieve_from_file (gchar **fn, gchar *cert_pem)
{
    gsize file_length = 0;
    GError *error = NULL;
    gboolean cancel = FALSE;

    gboolean save_new_filename = FALSE;
    gchar *file_name = g_strdup(* fn);

    gchar *file_contents = NULL;

    gchar *pem_pkey = NULL;

    gint tls_error = 0;
    gchar *password = NULL;

    TlsCert *cert = tls_parse_cert_pem (cert_pem);

    do {
        if (g_file_test(file_name, G_FILE_TEST_EXISTS)) {
            GIOChannel *gc = g_io_channel_new_file (file_name, "r", &error);
            if (gc) {
                g_io_channel_read_to_end (gc, &file_contents, &file_length, &error);
                g_io_channel_shutdown (gc, TRUE, NULL);

                do {
                    pem_pkey = tls_load_pkcs8_private_key (file_contents, password, cert->key_id, &tls_error);

                    if (tls_error == TLS_INVALID_PASSWORD) {
                        if (password)
                            dialog_error (_("The given password doesn't match with the one used while crypting the file."));

                        // We ask for a password
                        password = __pkey_manage_ask_external_file_password (cert->dn);

                        if (! password)
                            cancel = TRUE;
                    }

                } while (tls_error == TLS_INVALID_PASSWORD && ! cancel);

                g_free (password);

                if (! pem_pkey) {
                    if (tls_error == TLS_NON_MATCHING_PRIVATE_KEY) {
                        // The file could be opened, but it didn't contain any recognized private key
                        dialog_error (_("The file designated in database contains a private key, but it "
                                        "is not the private key corresponding to the certificate."));
                    } else {
                        // The file could be opened, but it didn't contain any recognized private key
                        dialog_error (_("The file designated in database doesn't contain any recognized private key."));
                    }
                }
            } else {
                // The file cannot be opened
                dialog_error (_("The file designated in database couldn't be opened."));

            }
        } else {
            // The file doesn't exist
            dialog_error (_("The file designated in database doesn't exist."));

        }

        if (! pem_pkey && ! cancel) {

#ifndef GNOMINTCLI
            // Show file open dialog

            GObject * widget = NULL, * filepath_widget = NULL, *remember_filepath_widget = NULL;
            GtkBuilder * dialog_gtkb = NULL;
            gint response = 0;

            dialog_gtkb = gtk_builder_new();
            gtk_builder_add_from_file (dialog_gtkb,
                                       g_build_filename (PACKAGE_DATA_DIR, "gnomint", "get_pkey_dialog.ui", NULL),
                                       NULL);
            gtk_builder_connect_signals (dialog_gtkb, NULL);

            filepath_widget = gtk_builder_get_object (dialog_gtkb, "pkey_filechooser");

            remember_filepath_widget = gtk_builder_get_object (dialog_gtkb, "save_filename_checkbutton");
            g_object_set (G_OBJECT(remember_filepath_widget), "visible", FALSE, NULL);

            gtk_widget_grab_focus (GTK_WIDGET(filepath_widget));
            gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(filepath_widget), file_name);
            g_object_set_data (G_OBJECT(filepath_widget), "save_filename_checkbutton", remember_filepath_widget);

            widget = gtk_builder_get_object (dialog_gtkb, "cert_dn_label");
            gtk_label_set_text (GTK_LABEL(widget), cert->dn);

            widget = gtk_builder_get_object (dialog_gtkb, "get_pkey_dialog");
            response = gtk_dialog_run(GTK_DIALOG(widget));

            if (! response) {
                cancel = TRUE;
            } else {
                g_free (file_name);
                file_name = g_strdup ((gchar *) gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(filepath_widget)));
                save_new_filename = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(remember_filepath_widget));
            }

            widget = gtk_builder_get_object (dialog_gtkb, "get_pkey_dialog");
            gtk_widget_destroy (GTK_WIDGET(widget));
            g_object_unref (G_OBJECT(dialog_gtkb));

#else
            cancel = TRUE;
#endif

        }
    } while (! pem_pkey && ! cancel);

    tls_cert_free (cert);
    g_free (file_contents);
    if (error)
        g_error_free (error);

    if (cancel) {
        g_free (file_name);
        return NULL;
    }

    if (save_new_filename) {
        g_free (*fn);
        (* fn) = file_name;
    }

    return pem_pkey;
}
Ejemplo n.º 5
0
void lecturePPM(char *path){
    PPM *pointeurSurImage=NULL;
    PPM image;
    pointeurSurImage=ℑ
    int caractere=0;
    FILE *f=NULL;
    RGB **matrice=NULL;
    int ligne =0,collonne=0;
    int *lig=&ligne,*col=&collonne;
    f=fopen(path,"r+");
    
    if (f !=NULL) {
        caractere=fgetc(f);
        if (!caractere=='P') {
            dialog_error(NULL, "Le fichier n'est pas valide");
            return ;
        }
        caractere=fgetc(f);
        image.nbMagique=caractere-48;//-48 car le code ascii de 0 est 48
        //avant pour sortir du 2
        caractere=fgetc(f);
        //tant que ce n'est pas un chiffre avance
        while (!(caractere>47 && caractere<58)) {
            caractere=fgetc(f);
        }
        int longeur=0;
        while (caractere>47 && caractere<58) {
            longeur=longeur*10+caractere-48;
            caractere=fgetc(f);
        }
        image.largeur=longeur;
        int largeur=0;
        caractere=fgetc(f);
        while (!(caractere>47 && caractere<58)) {
            caractere=fgetc(f);
        }
        while (caractere>47 && caractere<58) {
            largeur=largeur*10+caractere-48;
            caractere=fgetc(f);
        }
        
        image.hauteur=largeur;
        int niveau_max=0;
        caractere=fgetc(f);
        while (!(caractere>47 && caractere<58)) {
            caractere=fgetc(f);
        }
        
        
        
        
        //matrice de 0 à la bonne taille
        matrice=matriceZERO(image.hauteur, image.largeur);
        int nombre=0;
        //tabrgb contientra les 3 valeurs RGB à mettre dans la matrice
        int tabrgb[3];
        
        if (image.nbMagique==1) {
            while (!feof(f)) {
                nombre=0;
                while (caractere>47 && caractere<58) {//tant que c'est un chiffre
                    nombre=nombre*10+caractere-48;
                    caractere=fgetc(f);
                }                
                while ((caractere<=47 || caractere>=58) && !feof(f)) {//tant que ce n'est pas un chiffre
                    caractere=fgetc(f);
                }
                
                if(nombre==0){
                    nombre=255;
                }
                else{
                    nombre=0;
                }
                addMATRICE(matrice, nombre, lig, col, image.hauteur, image.largeur);
                image.niveau_max=255;
            }         
        }
        else{
            while (caractere>47 && caractere<58) {
                niveau_max=niveau_max*10+caractere-48;
                caractere=fgetc(f);
            }
            image.niveau_max=niveau_max;
            
            while (!(caractere>47 && caractere<58)) {
                caractere=fgetc(f);
            }
        }
        
        if (image.nbMagique==2) {
            while (!feof(f)) {
                nombre=0;
                while (caractere>47 && caractere<58) {//tant que c'est un chiffre
                    nombre=nombre*10+caractere-48;
                    caractere=fgetc(f);
                }
                
                while ((caractere<=47 || caractere>=58) && !feof(f)) {//tant que ce n'est pas un chiffre
                    caractere=fgetc(f);
                }
                
                
                addMATRICE(matrice, (nombre*255)/image.niveau_max, lig, col, image.hauteur, image.largeur);
            }         
        }
        else if (image.nbMagique==3) {
            tabrgb[0]=-1;
            tabrgb[1]=-1;
            tabrgb[2]=-1;
            int ajoute=0;
            while (!feof(f)) {
                
                while (caractere>47 && caractere<58 && ajoute==0) {//tant que c'est un chiffre
                    nombre=nombre*10+caractere-48;
                    caractere=fgetc(f);
                    ajoute=0;
                }
                
                
                
                if(ajoute==0) {
                    if(tabrgb[0]==-1) {
                        tabrgb[0]=(int)(nombre*255/image.niveau_max);
                    }
                    else if(tabrgb[1]==-1) {
                        tabrgb[1]=(int)(nombre*255/image.niveau_max);
                    }
                    else if(tabrgb[2]==-1) {
                        tabrgb[2]=(int)(nombre*255/image.niveau_max);
                        ajoute=2;
                    }
                }
                nombre=0;
                
                while ((caractere<=47 || caractere>=58) && !feof(f)) {//tant que ce n'est pas un chiffre
                    caractere=fgetc(f);
                }
                
                
                if(tabrgb[0]!=-1&&tabrgb[1]!=-1&&tabrgb[2]!=-1&&ajoute==2){
                    add3Matrice(matrice, tabrgb, lig, col, image.hauteur, image.largeur);
                    tabrgb[0]=-1;
                    tabrgb[1]=-1;
                    tabrgb[2]=-1;
                    ajoute=0;
                }
            }         
        }
        else if (image.nbMagique==6) {
            tabrgb[0]=-1;
            tabrgb[1]=-1;
            tabrgb[2]=-1;
            
            nombre=0;
            while (!feof(f)) {
                caractere=fgetc(f);
                
                tabrgb[nombre%3]=(int)(caractere*255/image.niveau_max);
                nombre++;
                if(nombre%3==0){
                    add3Matrice(matrice, tabrgb, lig, col, image.hauteur, image.largeur);
                }
            }         
        }
        else {
            dialog_error(NULL, "Format ppm non reconnu");
        }
    }
    
    image.pixels=matrice;
    
    int i,j;    
    image_init.nbMagique=3;
    image_init.largeur=pointeurSurImage->largeur;
    image_init.hauteur=pointeurSurImage->hauteur;
    image_init.niveau_max=255;
    image_init.pixels=(RGB**) malloc(image_init.hauteur*sizeof(RGB*));
    for(i=0;i<image_init.hauteur;i++){
        image_init.pixels[i]=(RGB *) malloc(image_init.largeur*sizeof(RGB));
    }
    for(i=0;i<image_init.hauteur;i++){
        for(j=0;j<image_init.largeur;j++){
            image_init.pixels[i][j].r=image.pixels[i][j].r;
            image_init.pixels[i][j].g=image.pixels[i][j].g;
            image_init.pixels[i][j].b=image.pixels[i][j].b;
        }
    }
}