Да се разшири един от протоколите SMTP, FTP, HTTP, DNS или SSH, реализиран от едно от изброените по-долу сървърни приложения с добавяне на нова команда DBUG. Командата DBUG трябва да предоставя възможност за извършване на поне три от следните дейности:
Синтаксис: READ fname [start [end [unit]]]
Table 1. Параметри на командата READ
| Параметър | Задължителен? | Тип | Описание |
|---|---|---|---|
| fname | да | string |
Име на файл за четене |
| start | не | integer |
Начална позиция за четене |
| end | не | integer |
Крайна позиция за четене |
| unit | не | character |
Единица, в която са зададени параметрите start и end: l за редове, c или b за символи/байтове, k за килобайтове, m за мегабайтове. |
Note: Ако start или end започват със знак - (минус), позицията се пресмята от текущия край на файла.
Синтаксис: WRITE fname start unit truncf string
Table 2. Параметри на командата WRITE
| Параметър | Задължителен? | Тип | Описание |
|---|---|---|---|
| fname | да | string |
Име на файл за четене |
| start | да | integer |
Начална позиция за четене |
| unit | да | character |
Единица, в която са зададени параметрите start и end: l за редове, c или b за символи/байтове, k за килобайтове, m за мегабайтове. |
| truncf | да | integer |
Ако е различен от 0, файлът трябва да бъде съкратен (truncated) непосредствено до края на записания низ, т.е. записаните символи да се окажат последните символи във файла. |
| string | да | string |
Низ, който да бъде записан във файла. |
Note: Ако start започва със знак - (минус), позицията се пресмята от текущия край на файла.
Синтаксис: LIST dirname
Съдържанието на директорията - списъкът от файлове и информацията за тях - може да бъде изведено в произволен формат, зависещ от операционната система и използваните библиотеки.
Синтаксис: EPLF dirname
Съдържанието на директорията - списъкът от файлове и информацията за тях - трябва да бъде изведено във формата EPLF, описан от проф. Daniel J. Bernstein на http://cr.yp.to/ftp/list/eplf.html.
Синтаксис: MLST dirname
Съдържанието на директорията - списъкът от файлове и информацията за тях - трябва да бъде изведено във формат MLST, описан в draft-ietf-ftpext-mlst-16.txt.
Синтаксис: EXEC progname [args...]
Ако програмата извежда данни на стандартния изход, те трябва да бъдат предадени на клиента като отговор на командата.
Table 6. Параметри на командата EXEC
| Параметър | Задължителен? | Тип | Описание |
|---|---|---|---|
| progname | да | string |
Име на външната програма, която да бъде изпълнена. Програмата трябва да бъде изпълнена чрез извикване на системна функция, еквивалентна на execlp(3), т.е. ако не съществува файл с посоченото име, то да бъде третирано като име на програма, която да бъде търсена в стандартния път (променливата PATH от обкръжението на изпълняваната програма). |
| args | не | string |
Един или повече параметъра, които да бъдат подадени на командния ред на изпълнената външна програма. |
Синтаксис: EXSH [program-path]
Всички данни, постъпили от клиента в същата сесия, се предават на командния интерпретатор или на програмите, изпълнени от него, като стандартен вход; всички данни, изведени от командния интерпретатор или програмите, изпълнени от него, на стандартния изход или стандартния изход за грешка, се предават на клиента.
Table 7. Параметри на командата EXEC
| Параметър | Задължителен? | Тип | Описание |
|---|---|---|---|
| program-path | не | string |
Име на външната програма (команден интерпретатор), която да бъде изпълнена. Програмата трябва да бъде изпълнена чрез извикване на системна функция, еквивалентна на execlp(3), т.е. ако не съществува файл с посоченото име, то да бъде третирано като име на програма, която да бъде търсена в стандартния път (променливата PATH от обкръжението на изпълняваната програма). |
Новата команда DBUG се добавя като SMTP команда, достъпна във всички фази на SMTP сесията. Параметрите се подават в рамките на същия ред текст, съдържащ командата, разделени с интервали; имената на параметрите не се подават, а се подразбират от позицията на параметъра на реда.
Ако командата изисква отговор, той се предава като последователност от байтове или редове текст според нуждата, без изпращане на стандартните за SMTP кодове за резултат/грешка.
Новата команда DBUG се добавя като FTP команда, достъпна във всички фази на FTP сесията. Параметрите се подават в рамките на същия ред текст, съдържащ командата, разделени с интервали; имената на параметрите не се подават, а се подразбират от позицията на параметъра на реда.
Ако командата изисква отговор, той се предава като последователност от байтове или редове текст според нуждата, без изпращане на стандартните за FTP кодове за резултат/грешка.
Новата команда DBUG се добавя като нов тип заявка (request type), т.е. на същото ниво като GET, POST и т.н. Форматът на заявката следва стандартния за HTTP формат, като самата команда (READ, LIST, EXEC и т.н.) и параметрите й се подават като URI в следния вид:
DBUG command=команда¶m1=value1¶m2=value2 HTTP/1.x
В горния пример команда трябва да бъде заместено с името на командата за изпълнение (READ, LIST и т.н.), а param1, param2 и т.н. - с имената на параметрите, както е описано по-горе в заданието. Използваният протокол може да бъде HTTP 1.0 или HTTP 1.1 по избор на клиента (подаващ командата DBUG).
Example 3. Пример за използване на DBUG с HTTP
HTTP заявка, която прочита първите два реда от файла /etc/passwd, разположен върху HTTP сървъра:
DBUG command=read&fname=/etc/passwd&start=1&end=2&unit=l HTTP/1.0 # $FreeBSD: src/etc/master.passwd,v 1.34 2003/04/27 05:45:29 imp Exp $ root:*:0:0:Charlie &:/root:/bin/csh
Заявката DBUG се добавя като специална обработка на заявки от тип A за hostnames с top-level domain dbg. Второто ниво на hostname е името на командата, която да бъде изпълнена (READ, LIST и т.н.), а оттам нататък (в обратен на нормалния ред за четене :) следват параметрите. Имената на параметрите не се задават изрично, а се подразбират от позицията в заявката.
Ако командата изисква отговор, той се предава като последователност от байтове в
секцията answer на отговора на DNS
заявката.
Example 4. Пример за използване на DBUG с DNS
DNS заявка, която прочита първите два реда от файла /etc/passwd, разположен върху DNS сървъра:
%nslookup L.2.1./etc/passwd.read.dbg
Non-authoritative answer:
Name: L.2.1./etc/passwd.read.dbg
Address: # $FreeBSD: src/etc/master.passwd,v 1.34 2003/04/27 05:45:29 imp Exp $
root:*:0:0:Charlie &:/root:/bin/csh
Заявката DBUG се предава като SSH пакет от тип SSH2_MSG_IGNORE, който съдържа данни, започващи със символите
DBUG. Останалата част от данните в пакета е командата и
параметрите й, подадени както при SMTP
и FTP.
Ако командата изисква отговор, той се предава като последователност от байтове в пакет
от тип SSH2_MSG_IGNORE.
Sendmail - http://www.sendmail.org/
qmail - http://www.qmail.org/
Microsoft Exchange 2003 или 2003 server - http://www.microsoft.com/exchange/
ProFTPd - http://www.proftpd.org/
wu-ftpd - http://www.wu-ftpd.org/
Apache - http://httpd.apache.org/
thttpd - http://www.thttpd.org/
Boa - http://www.boa.org/
Microsoft IIS HTTP server - http://www.microsoft.com/iis/
tinydns - http://cr.yp.to/djbdns.html
dnscache - http://cr.yp.to/djbdns.html
Microsoft IIS DNS server - http://www.microsoft.com/iis/
OpenSSH - http://www.openssh.org/
ssh.com SSH - http://www.ssh.com/