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

[gelöst]C: acl_to_text

heinzWo

Newbie
Hallo,
egal was ich probiere, die folgende Funktion läuft einige male Ok und stirbt dann in acl_to_text mit segmentation fault.

Code:
void GetAccessACL(char *pfad, char *ret) {
	acl_t aclstor;
	ssize_t *len_p;
	ssize_t xt = 5;
	aclstor	= acl_get_file(pfad, ACL_TYPE_ACCESS);
	if (aclstor != NULL) {
		len_p = &xt;
		strcpy(ret, acl_to_text(aclstor, len_p));
	} else
		strcpy(ret, "");
		
	acl_free(aclstor);
	aclstor = NULL;
}
Was könnte daran falsch sein?
Danke
Heinz
 
OP
H

heinzWo

Newbie
Hallo,
ich inkludiere <sys/acl.h>, in der die Typen acl_t festgelegt sind. Die Beschreibung der Funktion besagt auch, dass benötigter Speicher von der Funktion belegt wird und anschließend mit acl_free freigegeben werden muss.
Es läuft ja auch einige male durch und dann krieg ich den segmentation fault, obwohl doch nur lokale Variable verwendet werden.
Heinz
 

panamajo

Guru
Code:
acl_free(aclstor);

wird aufgerufen auch wenn aclstor == NULL ist.
Lt. man-page:
Code:
The argument obj_p may identify an ACL, an ACL entry qualifier, or a pointer to a string allocated by the acl_to_text () function.

also eben nicht NULL.
 
OP
H

heinzWo

Newbie
Das ist auch nur beim Probieren passiert. Ich habe die beiden Anweisungen wieder an die richtige Stelle verschoben (nur wenn aclstor != NULL) und das Ergebnis ist das gleiche.
 

abgdf

Guru
Vielleicht ist es ein String-Problem:
Vielleicht hast Du in der aufrufenden Funktion nicht genügend Speicher für "char *ret" (mit "malloc()") angefordert.

Ganz allgemein lies doch auch mal bei Gelegenheit:

http://www.howstuffworks.com/c36.htm

Viele Grüße
 
OP
H

heinzWo

Newbie
Vielen Dank, das war mein Problem. In der aufrufenden Funktion habe ich Speicher angefordert, den ich dann an falscher Stelle freigegeben habe.
Die Quelle für C, die Du angegeben hast, ist super!
Danke
Heinz
 
Oben