From 1bc54870307368cc8c74e07f7f4dd53498e09db0 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 27 Dec 2005 13:21:20 +0000 Subject: [PATCH] Inserito un inizio di esempio dell'uso delle funzioni delle capabilities. Aggiornato il file dei ringraziamenti. --- prochand.tex | 4 +- ringraziamenti.tex | 14 +++--- sources/cap_print.c | 110 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 sources/cap_print.c diff --git a/prochand.tex b/prochand.tex index 5ad3aaf..c92f737 100644 --- a/prochand.tex +++ b/prochand.tex @@ -2400,8 +2400,8 @@ dall'argomento \param{cap} all'interno dell'insieme indicato dall'argomento puntato dall'argomento \param{value\_p}; è possibile cioè leggere soltanto uno stato di una \textit{capability} alla volta. -La funzione \func{cap\_set\_flag} può invece impostare più capacità, anche se -solo all'interno dello stesso insieme, in una sola chiamata, per questo essa +La funzione \func{cap\_set\_flag} può invece impostare in una sola chiamata +più capacità, anche se solo all'interno dello stesso insieme; per questo essa prende un vettore di valori di tipo \type{cap\_value\_t} nell'argomento \param{caps}, la cui dimensione è specificata dall'argomento \param{ncap}. Il tipo di impostazione da eseguire (cancellazione o impostazione) viene indicato diff --git a/ringraziamenti.tex b/ringraziamenti.tex index 2d988c3..71924cb 100644 --- a/ringraziamenti.tex +++ b/ringraziamenti.tex @@ -22,18 +22,20 @@ GaPiL. In ordine rigorosamente alfabetico desidero citare: calling convention dei linguaggi e al confronto delle diverse tecniche di gestione della memoria. \item[\textbf{Mirko Maischberger}] per la rilettura, le numerose correzioni, - la segnalazione dei passi poco chiari ed il grande lavoro svolto per - produrre una versione della guida in un HTML piacevole ed accurato. + la segnalazione dei passi poco chiari e soprattutto per il grande lavoro + svolto per produrre una versione della guida in un HTML piacevole ed + accurato. \item[\textbf{Fabio Rossi}] per la rilettura, le innumerevoli correzioni, ed i vari consigli stilistici ed i suggerimenti per il miglioramento della comprensione di vari passaggi. \end{description} Infine, vorrei ringraziare il Firenze Linux User Group (FLUG), di cui mi -pregio di fare parte, che ha messo a disposizione il repository CVS, lo spazio -web e tutto quanto è necessario alla pubblicazione della guida e Truelite Srl, -che fornisce il nuovo repository SVN ed il sistema di tracciamento dei -sorgenti su \href{http://gapil.truelite.it/sources} +pregio di fare parte, che ha messo a disposizione il repository CVS su cui era +presente la prima versione della Guida, lo spazio web e tutto quanto è +necessario alla pubblicazione della guida e Truelite Srl, che fornisce il +nuovo repository SVN ed il sistema di tracciamento dei sorgenti su +\href{http://gapil.truelite.it/sources} {\texttt{http://gapil.truelite.it/sources}}. diff --git a/sources/cap_print.c b/sources/cap_print.c new file mode 100644 index 0000000..4d6e708 --- /dev/null +++ b/sources/cap_print.c @@ -0,0 +1,110 @@ +/* cap_print.c + * + * Copyright (C) 2005 Simone Piccardi + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/***************************************************************************** + * + * File cap_print.c: An example for capabilities print + * + * Author: S. Piccardi Dec. 2005 + * + *****************************************************************************/ +#include /* C standard library */ +#include /* I/O standard library */ +#include +#include + +/* + * Program cap_print + * + * Use libcap2 functions and print results + */ +/* Help printing routine */ +void usage(void); + +int main(int argc, char *argv[]) +{ + /* + * Variables definition + */ + int i; + cap_t capstatus; + cap_flag_t capset=CAP_EFFECTIVE; + cap_flag_value_t capval; + cap_value_t capability; + char * buffer; + /* + * Input section: decode command line parameters + * Use getopt function + */ + opterr = 0; /* don't want writing to stderr */ + while ( (i = getopt(argc, argv, "hepi")) != -1) { + switch (i) { + /* + * Handling options + */ + case 'i': /* read inherited set */ + capset=CAP_INHERITABLE; + break; + case 'e': /* read effective set */ + capset=CAP_EFFECTIVE; + break; + case 'p': /* read permitted set */ + capset=CAP_PERMITTED; + break; + case 'h': /* help option */ + printf("Wrong -h option use\n"); + usage(); + return -1; + break; + case '?': /* unrecognized options */ + printf("Unrecognized options -%c\n",optopt); + usage(); + default: /* should not reached */ + usage(); + } + } + /* *********************************************************** + * + * Options processing completed + * + * Main code beginning + * + * ***********************************************************/ + if ((argc - optind) != 0) { + printf("Wrong number of arguments %d\n", argc - optind); + usage(); + } + if ( (capstatus = cap_get_proc()) == NULL) { + perror("Lettura delle capabilities fallita"); + } + if ( (buffer = cap_to_text(capstatus, NULL)) == NULL) { + perror("Cannot convert capability status:"); + } + printf("Capabilities:\n %s\n", buffer); + exit(0); +} +/* + * routine to print usage info and exit + */ +void usage(void) { + printf("Program mygethost: do an hostname resolution \n"); + printf("Usage:\n"); + printf(" mygethost [-h] hostname \n"); + printf(" -h print this help\n"); + exit(1); +} -- 2.30.2