• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

ACL's mittels C-Programm einlesen

Cillura

Newbie
Hallo,

ich möchte über ein C-Programm auf die ACL-Information einer Datei zugreifen (schreibend und lesend). Hierzu wird wie ich vermute die acl.h Programmbibliothek verwendet.

Ich habe hier: "http://www.hmug.org/man/3/acl.php" einiges an Dokumentation gefunden. Nur leider keine Beispiele wie man dies im Quelltext verwendet.

Hat jemand eine Idee oder einen kurzen Code der mir bei dieser Sache nützlich sein könnte? Vor allem würde mich die Reihenfolge interessieren, in welcher diese verschiedenen Funktionen aufgerufen werden müssen.

Besten Dank,
Cillura
 

TeXpert

Guru
acl.h ist keine Bibliothek sondern ein Headerfile mit entsprechenden Deklarationen.

Du bindest die libc (-lc) ein, inkludierst
#include <sys/types.h>
#include <sys/acl.h>

und nutzt die entsprechenden Funktionen.... das ist dann ganz straight forward... für jede Funktion gibts auch eine Doku z.B.:

int acl_add_perm(acl_permset_t permset_d, acl_perm_t perm);

--> man 3 acl_add_perm

d.h. die Strukturen acl_permset_t und acl_perm_t füllen, Funktion aufrufen und Rückgabe auswerten...
 

TeXpert

Guru
ich sitze hier an einer Windowskiste :) kein Zugriff auf lokale manpages da hab ich mich spontan auf die Darwin-pages verlassen, die der Kollege im ersten Post verlinkt hat ... und da steht libc :)
 
OP
C

Cillura

Newbie
Japp, ist die -lacl. Sitze seit gestern Vormittag an der Implementation. Wenns fertig ist stelle ich ein Beispiel hoch.

Danke :D

---
EDIT - 25.10.2006
---
Also es ist ganz einfach wenn man erst einmal alles herausgefunden hat.
Wenn es jemanden interessiert, hier der Code:

Code:
#include <sys/acl.h>
#include <stdio.h>

int main () {
		
  acl_t aclvar;
  int count = 1;	
  aclvar = acl_init(count);

  aclvar = acl_get_file("test_acl.txt", ACL_TYPE_ACCESS);
  printf("%s\n", acl_to_text(aclvar,0));

  const char *text = "user::rw-,user:ata:rw-,group::r--,mask::r--,other::r--";
  aclvar = acl_from_text(text);
  acl_set_file("test_acl.txt", ACL_TYPE_ACCESS, aclvar);
  
  aclvar = acl_get_file("test_acl.txt", ACL_TYPE_ACCESS);
  printf("%s\n", acl_to_text(aclvar,0));

  acl_free(aclvar);

  printf("DONE!\n");

  return 0;
}

Viel Spaß damit, die einzelnen Funktionen sind alle auf den man-pages
erklärt.
 
Oben