glibc + uid ?

Nikos Mavroyanopoulos nmav at gnutls.org
Wed Aug 28 01:29:01 EEST 2002


On Tue, Aug 27, 2002 at 10:30:58PM +0300, V13 wrote:

> Mporei na moy eksigisei kapoios an ayto einai sfalma ths glibc h kapoioy 
> alloy?
> Sto /usr/include/bits/types.h exei:
> typedef __u_int __uid_t;                /* Type of user identifications.  */
> typedef __u_int __gid_t;                /* Type of group identifications.  */
> Eno sto man ths chown(2) leei kathara:
> int chown(const char *path, uid_t owner, gid_t group);
> 
>        If  the owner or group is specified as -1, then that ID is
>        not changed.

Είναι λάθος του manual. Επρεπε να αναφέρει όχι -1, αλλά ((uid_t)-1)
ωστε να μην υπάρχει παρανόηση. 

> uid_t	u;
> u=-1;
> if (u<0) { exit(0); }

Δεν ξέρεις αν το uid_t είναι signed τύπος, και καλό είναι στους
constructed τυπους να μην υποθέτεις τίποτα περισσότερο απο ότι αναφέρει
το manual. Για τη συγκεκριμένη περίπτωση το if (u==(uid_t)-1) είναι το 
σωστό.

Αυτή είναι πολύ συνηθισμένη παρανόηση και λογω αυτης, η time_t είναι ακόμη 
int τύπου (31 bit), και έχουμε το unix2k πρόβλημα με το 2038. Δεν την αλλάζουν
σε unsigned int (32 bit), για να μην δημιουργηθούν προβλήματα σε κώδικα του 
στύλ:
  time_t x = time(0);
  if (x < 0) error();

> <<V13>>

-- 
Nikos Mavroyanopoulos
mailto:nmav at gnutls.org



More information about the Linux-greek-users mailing list