/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
unix: åbne ~/dir/fil
Fra : Anders Bo Rasmussen


Dato : 03-10-01 18:57

Hvordan åbner jeg i et c-program ~/dir/fil?

Det skal også virke, hvis jeg vil åbne ~enanden/dir/fil

--
Anders Bo Rasmussen

Kipple drives out nonkipple.

 
 
Kent Friis (03-10-2001)
Kommentar
Fra : Kent Friis


Dato : 03-10-01 19:01

Den Wed, 3 Oct 2001 17:56:39 +0000 (UTC) skrev Anders Bo Rasmussen:
>Hvordan åbner jeg i et c-program ~/dir/fil?
>
>Det skal også virke, hvis jeg vil åbne ~enanden/dir/fil

sprintf(path, "%s/dir/fil",getenv("HOME"))

(ADVARSEL: utestet).

Mvh
Kent
--
IIS should be kept behind a PIX or better firewall, with port 80 closed.

Anders Bo Rasmussen (03-10-2001)
Kommentar
Fra : Anders Bo Rasmussen


Dato : 03-10-01 19:46

On Wed, 3 Oct 2001 18:00:33 +0000 (UTC),
Kent Friis <kfr@fleggaard.dk> wrote:

>>Hvordan åbner jeg i et c-program ~/dir/fil?
>>
>>Det skal også virke, hvis jeg vil åbne ~enanden/dir/fil
>
> sprintf(path, "%s/dir/fil",getenv("HOME"))

Så skal jeg selv holde øje med om filnavnet indeholder et ~, og det
ville jer gerne undgå. Det virker i vertfald slet ikke med
~enanden/dir/fil


--
Anders Bo Rasmussen

Kipple drives out nonkipple.

Kent Friis (03-10-2001)
Kommentar
Fra : Kent Friis


Dato : 03-10-01 20:13

Den Wed, 3 Oct 2001 18:45:51 +0000 (UTC) skrev Anders Bo Rasmussen:
>On Wed, 3 Oct 2001 18:00:33 +0000 (UTC),
>Kent Friis <kfr@fleggaard.dk> wrote:
>
>>>Hvordan åbner jeg i et c-program ~/dir/fil?
>>>
>>>Det skal også virke, hvis jeg vil åbne ~enanden/dir/fil
>>
>> sprintf(path, "%s/dir/fil",getenv("HOME"))
>
>Så skal jeg selv holde øje med om filnavnet indeholder et ~, og det
>ville jer gerne undgå. Det virker i vertfald slet ikke med
>~enanden/dir/fil

~ er normalt noget shell'en håndterer.

(Prøv fx: echo ~enanden)

Mvh
Kent
--
IIS should be kept behind a PIX or better firewall, with port 80 closed.

Anders Bo Rasmussen (03-10-2001)
Kommentar
Fra : Anders Bo Rasmussen


Dato : 03-10-01 20:22

On Wed, 3 Oct 2001 19:13:20 +0000 (UTC),
Kent Friis <kfr@fleggaard.dk> wrote:

>>Så skal jeg selv holde øje med om filnavnet indeholder et ~, og det
>>ville jer gerne undgå. Det virker i vertfald slet ikke med
>>~enanden/dir/fil
>
> ~ er normalt noget shell'en håndterer.

Men i mit program vil jeg gerne give brugeren mulighed for at angive
filer med ~. Jeg kunne selvfølgelig echo'e filnaven, og læse hvad den
skriver, men jeg synes ikke det er den fantastiske løsning.

--
Anders Bo Rasmussen

Kipple drives out nonkipple.

Kent Friis (03-10-2001)
Kommentar
Fra : Kent Friis


Dato : 03-10-01 20:38

Den Wed, 3 Oct 2001 19:21:52 +0000 (UTC) skrev Anders Bo Rasmussen:
>On Wed, 3 Oct 2001 19:13:20 +0000 (UTC),
>Kent Friis <kfr@fleggaard.dk> wrote:
>
>>>Så skal jeg selv holde øje med om filnavnet indeholder et ~, og det
>>>ville jer gerne undgå. Det virker i vertfald slet ikke med
>>>~enanden/dir/fil
>>
>> ~ er normalt noget shell'en håndterer.
>
>Men i mit program vil jeg gerne give brugeren mulighed for at angive
>filer med ~. Jeg kunne selvfølgelig echo'e filnaven, og læse hvad den
>skriver, men jeg synes ikke det er den fantastiske løsning.

Så skal du til at kigge på getpwent(3), for at få fat i brugerens
hjemmekatalog.

Mvh
Kent
--
IIS should be kept behind a PIX or better firewall, with port 80 closed.

Anders Bo Rasmussen (03-10-2001)
Kommentar
Fra : Anders Bo Rasmussen


Dato : 03-10-01 20:53

On Wed, 3 Oct 2001 19:38:25 +0000 (UTC),
Kent Friis <kfr@fleggaard.dk> wrote:

>>Men i mit program vil jeg gerne give brugeren mulighed for at angive
>>filer med ~. Jeg kunne selvfølgelig echo'e filnaven, og læse hvad den
>>skriver, men jeg synes ikke det er den fantastiske løsning.
>
> Så skal du til at kigge på getpwent(3), for at få fat i brugerens
> hjemmekatalog.

I følge man-siden, tager den informationerne fra /etc/passwd, og på det
system jeg sidder på står brugerne ikke i /etc/passwd. Er der ingen
generel unix-måde at gøre det på.

--
Anders Bo Rasmussen

Kipple drives out nonkipple.

Kent Friis (03-10-2001)
Kommentar
Fra : Kent Friis


Dato : 03-10-01 21:13

Den Wed, 3 Oct 2001 19:53:25 +0000 (UTC) skrev Anders Bo Rasmussen:
>On Wed, 3 Oct 2001 19:38:25 +0000 (UTC),
>Kent Friis <kfr@fleggaard.dk> wrote:
>
>>>Men i mit program vil jeg gerne give brugeren mulighed for at angive
>>>filer med ~. Jeg kunne selvfølgelig echo'e filnaven, og læse hvad den
>>>skriver, men jeg synes ikke det er den fantastiske løsning.
>>
>> Så skal du til at kigge på getpwent(3), for at få fat i brugerens
>> hjemmekatalog.
>
>I følge man-siden, tager den informationerne fra /etc/passwd, og på det
>system jeg sidder på står brugerne ikke i /etc/passwd. Er der ingen
>generel unix-måde at gøre det på.

Så skal du vist kigge på pam - hvis dit system bruger pam...

Mvh
Kent
--
IIS should be kept behind a PIX or better firewall, with port 80 closed.

Igor V. Rafienko (03-10-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 03-10-01 22:16

[ Anders Bo Rasmussen ]

[ snip ]

> I følge man-siden, tager den informationerne fra /etc/passwd, og på
> det system jeg sidder på står brugerne ikke i /etc/passwd. Er der
> ingen generel unix-måde at gøre det på.


Er du sikker på dette:

DESCRIPTION
These functions are used to obtain password entries. Entries
can come from any of the sources for passwd specified in the
/etc/nsswitch.conf file (see nsswitch.conf(4)).

Det trenger ikke å være /etc/passwd.

(og btw, Stevens' APUE har sikkert det svaret du leter etter (jeg er
for lat til å slå opp)).





ivr
--

Anders Bo Rasmussen (04-10-2001)
Kommentar
Fra : Anders Bo Rasmussen


Dato : 04-10-01 00:43

On 03 Oct 2001 23:15:43 +0200,
Igor V. Rafienko <igorr@ifi.uio.no> wrote:

>> I følge man-siden, tager den informationerne fra /etc/passwd, og på
>> det system jeg sidder på står brugerne ikke i /etc/passwd. Er der
>> ingen generel unix-måde at gøre det på.
>
>
> Er du sikker på dette:
>
> DESCRIPTION
> These functions are used to obtain password entries. Entries
> can come from any of the sources for passwd specified in the
> /etc/nsswitch.conf file (see nsswitch.conf(4)).

Min man-side siger:

DESCRIPTION
The getpwent() function returns a pointer to a structure
containing the broken out fields of a line from
/etc/passwd. The first time it is called it returns the
first entry; thereafter, it returns successive entries.

> Det trenger ikke å være /etc/passwd.
>
> (og btw, Stevens' APUE har sikkert det svaret du leter etter (jeg er
> for lat til å slå opp)).

APUE = Advanced Programming in the Unix Environment? Jeg var meget tæt
på at bestille den i dag. Prisen er dog lidt skræmmende, da den
beslaglægger mit bogbudget for 3-4 måneder. Jeg har hans Interprocess
Communication, og den er en af de 4-5 computerbøger jeg har, som jeg
synes om. Er APUE værd at investere i?

--
Like a rat in a maze Anders Bo Rasmussen mailto:fuzz01@spamfilter.dk
The path before me lies Frimestervej 42 1.tv http://www.fuzz.dk
And the pattern never alters 2400 Kbh. NV
Until the rat dies.

Igor V. Rafienko (04-10-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 04-10-01 01:05

[ Anders Bo Rasmussen ]

[ snip ]

> Min man-side siger:
>
> DESCRIPTION
> The getpwent() function returns a pointer to a structure
> containing the broken out fields of a line from
> /etc/passwd. The first time it is called it returns the
> first entry; thereafter, it returns successive entries.


Merkelig. Bruker du /etc/shadow elns? Jeg _vet_ at det fungerer med
passwd lagt i NIS (Solaris), fx. (ok, nå _skal_ jeg sulle meg bort til
å slå det opp).

[ snip ]


> APUE = Advanced Programming in the Unix Environment?


Korrekt.


> Jeg var meget tæt på at bestille den i dag. Prisen er dog lidt
> skræmmende, da den beslaglægger mit bogbudget for 3-4 måneder. Jeg
> har hans Interprocess Communication, og den er en af de 4-5
> computerbøger jeg har, som jeg synes om. Er APUE værd at investere
> i?


En jeg kjenner mener at APUE var hans beste nok. Jeg har
flatedødetrærversjonen og det jeg _virkelig_ angrer på er at den ikke
finnes elektronisk. Det er en skikkelig (i Knuth's betydning av ordet)
bok (som er samtidig mye lettere lest enn Knuth sine verk).

IMHO er boken definitivt verdt pengene.





ivr
--
The design of a worldwide, fully transparent distributed file system
for simultaneous use by millions of mobile and frequently disconncted
users is left as an exercise for the reader.
   -- A.S. Tanenbaum, "Modern Operating Systems", 13.3.4, p. 584

Igor V. Rafienko (04-10-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 04-10-01 18:17

[ Anders Bo Rasmussen ]

[ snip ]


Mnja, nu har jeg bladd litt i APUE:

Boken sier ingenting om _hvor_ passordene hentes ifra. Men det ser
iallfall ut slik at selv når passordinformasjonen ligger i NIS, så kan
man hente verdier derifra. Ligger passordene i /etc/shadow, så er det
ikke meningen at filen skal være lesbar for noen andre enn root
likevel (og programmet ditt er vel ikke suid, hva?)

Dog, en skal være klar over at 'pw_dir' feltet ikke er POSIX (det er
SVR4 og 4.3+ BSD), så det hjelper kanskje ikke likevel.





ivr
--
C++ is to programming as sex is to reproduction. Better ways might
technically exist but they're not nearly as much fun.
            -- Nikolai Irgens

Anders Bo Rasmussen (07-10-2001)
Kommentar
Fra : Anders Bo Rasmussen


Dato : 07-10-01 17:57

On 04 Oct 2001 19:16:52 +0200,
Igor V. Rafienko <igorr@ifi.uio.no> wrote:

> Mnja, nu har jeg bladd litt i APUE:
>
> Boken sier ingenting om _hvor_ passordene hentes ifra. Men det ser
> iallfall ut slik at selv når passordinformasjonen ligger i NIS, så kan
> man hente verdier derifra. Ligger passordene i /etc/shadow, så er det
> ikke meningen at filen skal være lesbar for noen andre enn root
> likevel (og programmet ditt er vel ikke suid, hva?)

Nej, det er en lille smart menu. Jeg har valgt at bruge popen("echo -n
<string fra lexer>").

--
Like a rat in a maze Anders Bo Rasmussen mailto:fuzz01@spamfilter.dk
The path before me lies Frimestervej 42 1.tv http://www.fuzz.dk
And the pattern never alters 2400 Kbh. NV
Until the rat dies.

Anders Bo Rasmussen (04-10-2001)
Kommentar
Fra : Anders Bo Rasmussen


Dato : 04-10-01 00:36

On Wed, 3 Oct 2001 19:13:20 +0000 (UTC),
Kent Friis <kfr@fleggaard.dk> wrote:

> ~ er normalt noget shell'en håndterer.
>
> (Prøv fx: echo ~enanden)

Jeg endte med at bruge echo via popen. Tak for hjælpen.

--
Like a rat in a maze Anders Bo Rasmussen mailto:fuzz01@spamfilter.dk
The path before me lies Frimestervej 42 1.tv http://www.fuzz.dk
And the pattern never alters 2400 Kbh. NV
Until the rat dies.

Kim Nielsen (04-10-2001)
Kommentar
Fra : Kim Nielsen


Dato : 04-10-01 07:06

Kent Friis wrote:
>
> sprintf(path, "%s/dir/fil",getenv("HOME"))
>
> (ADVARSEL: utestet).
Jeps for så indeholder dit program nemlig en mulighed for bufferoverflow
...

Mvh
Kim

Kent Friis (04-10-2001)
Kommentar
Fra : Kent Friis


Dato : 04-10-01 15:58

Den Thu, 04 Oct 2001 08:05:35 +0200 skrev Kim Nielsen:
>Kent Friis wrote:
>>
>> sprintf(path, "%s/dir/fil",getenv("HOME"))
>>
>> (ADVARSEL: utestet).
>Jeps for så indeholder dit program nemlig en mulighed for bufferoverflow

Nope, for du ved ikke hvordan jeg har allokeret path

path=malloc(strlen(getenv("HOME"))+7);

Mvh
Kent
--
IIS should be kept behind a PIX or better firewall, with port 80 closed.

Igor V. Rafienko (04-10-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 04-10-01 16:59

[ Kent Friis ]

[ snip ]

> > > sprintf(path, "%s/dir/fil",getenv("HOME"))

(...)

> Nope, for du ved ikke hvordan jeg har allokeret path
>
> path=malloc(strlen(getenv("HOME"))+7);


Nettopp derfor vil du få bufferoverflow.





ivr
--
ëÏÇÄÁ Ñ ÅÍy ×ÅÖÌÉ×Ï ÎÁÍÅËÁÌÁ ÎÁ ÔÏ, ÞÔÏ ÎÅ y ×ÓÅÈ ÐpÉÇÌÁÛÅÎÎÙÈ ÍÏÖÅÔ
ÂÙÔØ ÜÌÅËÔpÏÎÎÁÑ ÐÏÞÔÁ, óÅpÅÇÁ ÄÅÌÁÌ Ë×ÁÄpÁÔÎÙÅ ÇÌÁÚÁ É ÓÐpÁÛÉ×ÁÌ -
ÚÁÞÅÍ ×ÏÏÂÝÅ ÔÁËÉÈ ÌÀÄÅÊ ÐpÉÇÌÁÛÁÔØ ÎÁ Ó×ÁÄØÂy.
   -- "úÁÐÉÓËÉ ÖÅÎÙ - ðÏÓÌÅÄÎÉÅ ÄÎÉ ÐÅÒÅÄ Ó×ÁÄØÂÏÊ", á. üËÓÌÅÒ

Per Abrahamsen (04-10-2001)
Kommentar
Fra : Per Abrahamsen


Dato : 04-10-01 16:46

kfr@fleggaard.dk (Kent Friis) writes:

> Den Thu, 04 Oct 2001 08:05:35 +0200 skrev Kim Nielsen:
> >Kent Friis wrote:
>>>
>>> sprintf(path, "%s/dir/fil",getenv("HOME"))
>>>
>>> (ADVARSEL: utestet).
>>Jeps for så indeholder dit program nemlig en mulighed for bufferoverflow
>
> Nope, for du ved ikke hvordan jeg har allokeret path
>
> path=malloc(strlen(getenv("HOME"))+7);

Hmm... så får du et bufferoverflow uanset hvad $HOME er sat til.


Kent Friis (04-10-2001)
Kommentar
Fra : Kent Friis


Dato : 04-10-01 16:53

Den Thu, 04 Oct 2001 17:45:52 +0200 skrev Per Abrahamsen:
>kfr@fleggaard.dk (Kent Friis) writes:
>
>> Den Thu, 04 Oct 2001 08:05:35 +0200 skrev Kim Nielsen:
>> >Kent Friis wrote:
>>>>
>>>> sprintf(path, "%s/dir/fil",getenv("HOME"))
>>>>
>>>> (ADVARSEL: utestet).
>>>Jeps for så indeholder dit program nemlig en mulighed for bufferoverflow
>>
>> Nope, for du ved ikke hvordan jeg har allokeret path
>>
>> path=malloc(strlen(getenv("HOME"))+7);
>
>Hmm... så får du et bufferoverflow uanset hvad $HOME er sat til.

D'ooh...

+9 sg* da.

Mvh
Kent
--
IIS should be kept behind a PIX or better firewall, with port 80 closed.

Kim Nielsen (05-10-2001)
Kommentar
Fra : Kim Nielsen


Dato : 05-10-01 07:34

Kent Friis wrote:
>

en anden løsning kunne være

char path[255+9+1];
snprintf(path, sizeof(path), "%255s/dir/fil",getenv("HOME"));
path[sizeof(path)] = '\0';

selvom jeg stadig ikke kan lide sprintf :)

/Kim

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste