RFC 775 Directory oriented FTP commands Page 1 COMANDI FTP ORIENTATI ALLE CARTELLE David Mankins (dm@bbn-unix) Dan Franklin (dan@bbn-unix) A. D. Owen (ADOwen@bbnd) Traduzione a cura di ComiSAT Brescia, Set. 2002 (comisat@yahoo.it) Distribuita da .::http://www.rfc.altervista.org::. Come parte del progetto per il mantenimento di siti remoti per ARPA (Remote Site Maintenance – RSM), BBN ha installato e cura il software di diversi DEC PDP-11(1) che girano su sistemi operativi Unix. Dal momento che Unix ha una struttura di directory ad albero, nella quale le cartelle sono facilmente manipolabili come fossero files, abbiano trovato conveniente espandere i servers FTP su queste macchine in modo da includere comandi che abbiano a che fare con la creazione di cartelle. Dato che su ARPAnet vi sono altri hosts che hanno una struttura di cartelle ad albero, compresi Tops-20 e Multics(2), abbiamo cercato di rendere questi comandi piu’ generali possibile. Al nostro server abbiamo aggiunto quattro comandi: XMKD child Crea una directory chiamata “child”. XRMD child Rimuove la directory chiamata “child”. XPWD Stampa l’attuale cartella di lavoro. XCUP Passa alla cartella superiore (parent directory) (3)(4) L’argomento “child” dovrebbe essere creato (rimosso) come una sottocartella della directory di lavoro corrente, a meno che la stringa “child” non contenga sufficienti informazioni per specificare diversamente al server, per esempio, “child” e’ un percorso assoluto (in Multics e Unix), oppure qualcosa come “” sotto Tops-20. RFC 775 Directory oriented FTP commands Page 2 CODICI DI RISPOSTA Il comando XCUP e’ un caso speciale di XCWD (5), e viene incluso per semplificare l’implementazione di programmi per il trasferimento di alberi di cartelle tra sistemi operativi che hanno sintassi differenti per la nomenclatura delle parent directory. Pertanto raccomandiamo che i codici di risposta per XCUP siano identici a quelli per XCWD. Allo stesso modo, raccomandiamo che i codici di risposta per XRMD siano identici ai codici di risposta per il suo file analogo, DELE. I codici di risposta per XMKD, tuttavia, sono leggermente piu’ complicati. Una cartella creata di recente sara’ probabilmente oggetto di un futuro comando XCWD. Sfortunatamente, l’argomento di XMKD puo’ non sempre essere un argomento adatto per XCWD. Questo e’ il caso, ad esempio, quando viene creata una sottocartella Tops-20 dando solamente il nome della stessa. Vale a dire, con un server FTP Tops-20, la sequenza di comandi XMKD NUOVACARTELLA XCWD NUOVACARTELLA non andra’ a buon fine. La nuova directory puo’ essere riferita solamente dal suo nome “assoluto”; per esempio, se il comando XMKD sopra viene fornito mentre si e’ connessi alla cartella , alla nuova sottocartella ci si puo’ riferire solamente col nome . Sotto Unix e Multics, tuttavia, l’argomento fornito a XMKD puo’ non essere appropriato. Se questo e’ un percorso “relativo” (ovvero un percorso interpretato relativo alla cartella corrente), l’utente avrebbe la necessita’ di stare nella stessa cartella corrente per raggiungere la sottocartella. A seconda dell’applicazione, questo puo’ rivelarsi un inconveniente. In ogni caso non e’ molto robusto. Per risolvere questi problemi, sino al riuscito completamento di un comando XMKD, il server dovrebbe ritornare una linea del form: 257"" Ovvero, il server dira’ all’utente quale stringa usare per riferirsi alla cartella creata. Il nome della cartella puo’ contenere qualsiasi RFC 775 Directory oriented FTP commands Page 3 carattere; le virgolette all’interno dovrebbero essere fatte uscire dalle virgolette (convenzione di “virgolettatura”). Per esempio, un utente si connette alla cartella /usr/dm, e crea una sottocartella chiamata ‘child’: XCWD /usr/dm 200 directory changed to /usr/dm XMKD child 257 "/usr/dm/child" directory created Esempio con virgolette incluse: XMKD foo"bar 257 "/usr/dm/foo""bar" directory created XCWD /usr/dm/foo"bar 200 directory changed to /usr/dm/foo"bar Crediamo che la precedente esistenza di una sottocartella con lo stesso nome dovrebbe essere interpretata come un errore, e lo abbiamo implementato sul nostro server cosi’ da dare una risposta d’errore di “accesso negato” in questo caso. CWD /usr/dm 200 directory changed to /usr/dm XMKD child 521-"/usr/dm/child" directory already exists; 521 taking no action. Raccomandiamo che le risposte di insuccesso per XMKD siano analoghe per il suo cugino file di crezione, STOR. Raccomandiamo inoltre che un “accesso negato” sia tornato se il nome di un file uguale al nome di una sottocartella sara’ in conflitto con la creazione della sottocartella (questo e’ problema su Unix, ma non dovrebbe esserlo su Tops-20). Essenzialmente, poiche’ il comando XPWD ritorna lo stesso tipo di informazione di un comando XMKD riuscito, abbiamo implementato che pure il comando XPWD riuscito usi il codice di risposta 257. Riportiamo ora un sommario dei codici di risposta proposti per i comandi sperimentali. I codici fuori parentesi sono conformi con la RFC 691; ad esempio, per il vecchio protocollo come aggiornato dai suggerimenti di quella RFC. I programmi server ed utente su BBN-Unix implementano attualmente tali codici. La risposta 257 e’ l’unico codice nuovo. I codici di risposta riportati tra parentesi sono per il “nuovo” protocollo ftp, la cui maggior parte e’ stata recentemente documentata nella RFC 765. RFC 775 Directory oriented FTP commands Page 4 Il codice inventato per il Protocollo della RFC 765 e’ il 251. Comando spiegazione del comando codice risp. commento (traduzione) XMKD crea una directory 257 (251) "pathname" created (“nome percorso” creato) 521 (450) "pathname" already exists (“nome percorso” gia’ esistente) 506 (502) action not implemented (azione non implementata) 521 (450) access denied (accesso negato) 550 (501) bad pathname syntax or ambiguous (sintassi del nome percorso non corretta o ambigua) 425 (451) random file system error (error casuale nel file system) XCUP passa al livello superiore della cartella corrente 200 (200) working directory changed (cartella di lavoro cambiata) 506 (502) action not implemented (azione non implementata) 507 (551) no superior directory (non vi sono cartelle superiori) 521 (450) access denied (accesso negato) 425 (451) random file system error (errore casuale nel file system) XRMD rimuove la directory 224 (250) deleted ok (rimozione ok) 506 (502) action not implemented (azione non implementata) 521 (450) access denied (accesso negato) 550 (501) bad pathname syntax or ambiguous (sintassi del nome percorso non corretta o ambigua) 425 (451) random file system error (errore casuale nel file system) XPWD stampa la directory di lavoro attuale 257 (251) "pathname" (“nome percorso”) 425 (451) random file system error (errore casuale nel file system) 506 (502) action not implemented (azione non implementata) RFC 775 Directory oriented FTP commands Page 5 SUBTLETIES Siccome questi comandi sono per lo piu’ utili nel trasferimento di sottoalberi da una macchina ad un altra, dobbiamo insistere sul fatto che l’argomento di XMKD dev’essere interpretato come una sottocartella della cartella di lavoro corrente, a meno che non contenga informazioni sufficienti per dire diversamente all’host di destinazione. Un esempio ipotetico del suo utilizzo nel mondo del Tops-20: XCWD 200 Working directory changed XMKD overrainbow 257 "" directory created XCWD overrainbow 431 No such directory XCWD 200 Working directory changed XCWD 200 Working directory changed to XMKD 257 "" directory created XCWD Si noti che il primo esempio risulta in una sottocartella della cartella connessa. In contrasto, l’argomento nel secondo esempio contiene informazioni sufficienti sotto Tops-20 per dire che la cartella e’ una cartella di primo livello (top-level). Si noti anche che nel primo esempio l’utente “ha violato” il protocollo tentando di accedere alla cartella appena creata con un nome diverso da quello tornato dal Tops-20. I problemi che potrebbero essere risultati in questo caso sono li’ stati una cartella ; questa e’ un’ambiguita’ inerente a qualche implementazione Tops-20. Simili considerazioni si applicano al comando XRMD. Il punto e’ questo: a meno che non voglia violare la convenzione di un host per la denotazione relativa contro percorsi assoluti, l’host dovrebbe trattare gli operandi dei comandi XMKD e XRMD come sottocartelle. La risposta 257 al comando XMKD deve sempre contenere il percorso assoluto della cartella creata. RIFERIMENTI File Transfer Protocol (RFC 765), Postel, J., June 1980 RFC 775 Directory oriented FTP commands Page 6 CWD Command of FTP (RFC 697), Lieb, J., NIC 32963, 14 July 1975 One More Try on the FTP (RFC 691), Harvey, B., NIC 32700, 28 May 1975 Revised FTP Reply Codes (RFC 640), Postel, J., N. Neigus, K. Pogran, NIC 30843, 5 June 1974 File Transfer Protocol (RFC 542), Neigus, N., NIC 17759, 12 July 1977 NOTE DEL TRADUTTORE (1) PDP-11 - Minicomputer prodotto dalla Digital Equipment Corp. (DEC) e rilasciato la prima volta nel 1970. E’ stato largamente diffuso nelle universita’ americane. Ne sono state fatte diverse versioni. (2) Sistemi operativi usati in passato. Il Multics (acronimo di Multiplexed Information and Computing Service) in particolare, e’ uno dei primi sistemi operativi multiutente: parliamo degli anni sessanta. Fu usato per una ventina d’anni ma non si divulgo’ mai in larga scala; fu tuttavia la musa ispiratrice per lo sviluppo di diversi altri sistemi operativi. (3) Una cartella che CONTIENE sottocartelle si dice ‘parent’, cartella superiore; una cartella CONTENUTA in un'altra si dice ‘child’, cartella inferiore (termini traducibili dall’inglese in ‘genitore’ e ‘bambino’). Superiore ed inferiore sono intesi nella gerarchia della struttura ad albero. (4) I comandi iniziano tutti con la X per distinguersi da altri comandi esistenti, e per contrassegnare la nuova categoria di comandi; le lettere restanti sono la contrazione delle seguenti espressioni inglesi: XMKD -> MaKe Directory (crea cartella) XRMD -> ReMove Directory (rimuovi cartella) XPWD -> Print Working Directory (stampa cartella di lavoro) XCUP -> Change Up(?) Parent (vai alla cartella superiore) (5) XCWD -> Change Working Directory (cambia la cartella di lavoro corrente)