※この説明はRedhatLinuxV8.0を元にしている。
サーバ側:受信データの取得(環境変数取得)
これが受信文字列取得&変数代入。
書式と変数を増やすだけで、引数の増加に対応可能。 '&%*[^=]=%[^&]' が追加単位。
書式が入力されるデータの数より多い場合、あまった書式指定は無視されるので、大らかに行きましょう。
sscanf( getenv("QUERY_STRING"),
"%*[^=]=%[^&]&%*[^=]=%[^&]&%*[^=]=%[^&]&%*[^=]=%[^&]&%*[^=]=%[^&]&%*[^=]=%[^&]",
strP1r, strP2, strP3, strP4, strP5, strP6
);
サーバ側:特定プロセスの状態(StartOrStop)確認
(例はntpサーバデーモン)
popen( )を使用することで、grep結果を仮想ファイルに吐き出して、それを読み込んで処理する。
if( (pFile = popen( "ps -ef |grep ^ntp", "r" ) ) == NULL ){
fprintf( stderr, "error!\n" );
exit( -1 );
}
sprintf( statusNtp, "dead" );
while( fgets( strLine, 128, pFile ) ){
if( 0 == strncmp( strLine, "ntp", 3 ) ){ /* ntpd is Alive */
sprintf( statusNtp, "alive" );
break;
}
}
pclose( pFile );
サーバ側:管理者権限コマンドの実行
ntpサーバのリブート
1.一般ユーザにて、シェルにリブートコマンドを渡すプログラム作成。
suNtpReboot.c
main(){
setuid( 0 );
setgid( 0 );
system( "/etc/rc.d/init.d/ntpd restart" );
}
2.rootに切り替え
3.コンパイル結果のオーナーを変更
chown root suNtpReboot.o
4.パーミッション変更
chmod +s suNtpReboot.o
5.CGIから実行
system( "/var/www/cgi-bin/suNtpReboot.o" );
クライアント側:JavaScript-特定画面のリロード
puts( "\n"
"
-->\n\n"
);
クライアント側:JavaScript-よくある、うるう年チェック
printf("// 2(Feb.) Proc\n");
printf("if( document.form.dateMonth.value == 2 ){\n");
printf(" // LeapYear Check\n");
printf(" if( ( (( document.form.dateYear.value % 4 ) == 0 )\n");
printf(" &&(( document.form.dateYear.value % 100 ) != 0 ) )\n");
printf(" ||\n");
printf(" ( ( document.form.dateYear.value % 400 ) == 0 )\n");
printf(" ) { // LeapYear Proc\n");
printf(" if( document.form.dateDay.value > 29 ){\n");
printf(" alert(\"指定された月の日数は29日までです\");\n");
printf(" return false;\n");
printf(" }\n");
printf(" } // End of LeapYear Proc\n");
printf("else{ // Non-LeapYear Proc\n");
printf(" if( document.form.dateDay.value > 28 ){\n");
printf(" alert(\"指定された月の日数は28日までです\");\n");
printf(" return false;\n");
printf(" }\n");
printf(" } // End of Non-LeapYear Proc\n");
printf("} // End of 2(Feb.) Proc\n");
-eod-