- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
#include "statements.h"
#include "lexer.h"
#include "conditions.h"
#include "variables.h"
#include "generator.h"
#include "labels.h"
#include "types.h"
#include "errors.h"
#include "io.h"
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+141
#include "statements.h"
#include "lexer.h"
#include "conditions.h"
#include "variables.h"
#include "generator.h"
#include "labels.h"
#include "types.h"
#include "errors.h"
#include "io.h"
В одном из cpp-файлов такой вот нехилый список инклудов.
+122
gid_t sgid=0;
cpd=getpwuid(ut);
if(argc<1){
fprintf(stderr,"%s: uid not specified:%s\n",argv[0]);
exit(EXIT_FAILURE);
}
suid= atolevl(argv[1]);
printf("uid %d\n",suid);
if(cpd==NULL){
fprintf(stderr,"%s: cant get current user:%s\n",argv[0]);
exit(-1);
}
printf("%s: %s\n",cpd->pw_name,cpd->pw_passwd);
strcpy(user_name,cpd->pw_name);
fp=fopen(fpass,"r");
if(fp==NULL){
fprintf(stderr,"can't open file %s:%s",fpass,argv[0]);
}
cpd = fgetpwent(fp);
if(cpd==NULL){
fprintf(stderr,"no find user",fpass,argv[0]);
}
while((cpd=fgetpwent(fp))!=NULL){
if(strcmp(cpd->pw_name,user_name)==0){
if(strmycpy(salt,cpd->pw_passwd,3,19)==NULL){
fprintf(stderr,"can't choose salt:%s\n",argv[0]);
exit(-1);
};
strcpy(pass,cpd->pw_passwd);
if(strmycpy(mt,cpd->pw_passwd,0,2)==NULL){
fprintf(stderr,"can't choose salt:%s\n",argv[0]);
exit(-1);
};
printf("%s: %s: salt: %s\n",\
cpd->pw_name,cpd->pw_passwd,salt);
sz=strlen(cpd->pw_passwd);
printf("sz: %d\n",sz);
}
}
fclose(fp);
int fl=0;
size_t i=0;
for(i=0;i<=10 && fl<2;i++){
if(pass[i]=='$'){fl++;printf("fl %d\n",fl);}
}
static char mtt[5];
if(fl==2){
strmycpy(mtt,pass,1,i-1);
}
printf("%s\n ",mtt);
write(1,"Scheme: ",8);
if(strcmp(mtt,"")==0)write(1,"des_crypt\n",10);
if(strcmp(mtt,"1")==0)write(1,"md5_crypt\n",10);
if(strcmp(mtt,"2")==0 || strcmp(mt,"2a")==0 || strcmp(mt,"2x")==0 || strcmp(mt,"2y")==0)write(1,"bcrypt\n",7);
if(strcmp(mtt,"6")==0)write(1,"sha512_crypt\n",13);
if(strcmp(mtt,"3")==0)write(1,"bsd_nhash\n",10);
if(strcmp(mtt,"5")==0)write(1,"sha256_crypt\n",13);
if(strcmp(mtt,"md5")==0 )write(1,"sun_md5_crypt\n",14);
if(strcmp(mtt,"sha1")==0 )write(1,"sha1_crypt\n",11);
char *prompt="Please enter your password: ";
char *mpass=getpass(prompt);
char *mypass=crypt(mpass,pass);
if(strcmp(mypass,pass)==0){
printf("Password is ok\n");
if(seteuid(0)==-1 || setuid(0)==-1){
fprintf(stderr, "%s: can't change euid to %d: %s\n", argv[0],suid,
strerror(errno));
exit(EXIT_FAILURE);
}
if(setuid(suid)==-1){
fprintf(stderr, "%s: can't change uid to %d: %s\n", argv[0],suid,
strerror(errno));
exit(EXIT_FAILURE);
}
if(seteuid(suid)==-1){
fprintf(stderr, "%s: can't change euid to %d: %s\n", argv[0],suid,
strerror(errno));
exit(EXIT_FAILURE);
}
if(suid==0){
if(setresuid(eut,suid,eut)==-1){
fprintf(stderr, "%s: can't change euid to %d: %s\n", argv[0],suid,
strerror(errno));
exit(EXIT_FAILURE);
};
}
pid_t pt=fork();
if(pt>0){
execv(shell,NULL);
abort();
} else if(pt==0){
waitpid(pt,&status,WEXITED);
abort();
}
} else printf("The password isn't OK\n");
abort();
return 0;
};
Тупая программа стаем рутом sudo chown root:root sume && sudo chmod u+s sume
+114
#include <stdio.h>
/* Программа выводит ASCII-коды введённых символов */
int main()
{
int a[255];
int i;
for (i = 0; i < 256; i++) {
a[i] = i;
}
int c;
while ((c = getchar()) != EOF) {
if (c != '\n')
printf("%d\n", a[c]);
}
return 0;
}
+116
#define KRATNOST6_STEPE32_(VAL) \
( \
(\
(VAL/32*32)+(((VAL/32)^1)*(\
(VAL/16*16)+(((VAL/16)^1)*(\
(VAL/8*8)+(((VAL/8)^1)*(\
(VAL/4*4)+(((VAL/4)^1)*(\
(VAL/2*2)\
))\
))\
))\
))\
)\
+\
((\
(VAL/32)+(((VAL/32)^1)*(\
(VAL/16)+(((VAL/16)^1)*(\
(VAL/8)+(((VAL/8)^1)*(\
(VAL/4)+(((VAL/4)^1)*(\
(VAL/2)\
))\
))\
))\
))\
)^1)*32\
)
#define KRATNOST6_STEPE32(MAX_STEPEN6,VAL) KRATNOST6_STEPE32_(((int)VAL&((1<<(MAX_STEPEN6+1))-1)))
Вычисление ближайшей кратности к степ 2 в препроцессоре, такую байду сорудил. (не знаю правильно ли выразился)
Тут максимальная 32. Если есть выше то вот тут выставляется 32 всёравно.
Проще не варик?
+133
if((i & 0x01)!=0) addr |= 0x80; else addr &= ~0x80;
if((i & 0x02)!=0) addr |= 0x40; else addr &= ~0x40;
if((i & 0x04)!=0) addr |= 0x20; else addr &= ~0x20;
if((i & 0x08)!=0) addr |= 0x10; else addr &= ~0x10;
if((i & 0x10)!=0) addr |= 0x08; else addr &= ~0x08;
if((i & 0x20)!=0) addr |= 0x04; else addr &= ~0x04;
if((i & 0x40)!=0) addr |= 0x02; else addr &= ~0x02;
if((i & 0x80)!=0) addr |= 0x01; else addr &= ~0x01;
Перестановка бит в обратном порядке.
+103
void str2ip_s_Before( unsigned char* ptrIP, unsigned short* ptrPort, const wchar_t* src, size_t count )
{
int i;
if( !ptrIP )
return;
while( src && count && !iswdigit( *src ) )//skip separators and spaces
++src, --count;
for( i = 0; i < 4 && count; ++i )//IP address
{
ptrIP[ i ] = ( unsigned char )_wtoi( src );
while( src && count && iswdigit( *src ) )//skip current number
++src, --count;
while( src && count && !iswdigit( *src ) )//skip separators and spaces
++src, --count;
}
if( ptrPort && src && count )
*ptrPort = ( unsigned short )_wtoi( src );
}
int str2ip_sAfter( unsigned char* ptrIP, unsigned short* ptrPort, const wchar_t* src, size_t count )
{
int i, iRadix;
wchar_t* endptr;
if( !ptrIP || !src || 0 == count )
return 0;
for( i = 0; i < 4; ++i )
ptrIP[ i ] = 0;
if( ptrPort )
*ptrPort = 0;
while( 0 != count && !iswdigit( *src ) ) //skip separators and spaces
++src, --count;
for( i = 0; i < 4 && 0 != count; ++i ) //IP address
{
if( count > 1 && src[ 0 ] == L'0' )
{
if( src[ 1 ] != L'x' && src[ 1 ] != L'X' )
iRadix = 8;
else
iRadix = 16;
}
else
iRadix = 10;
ptrIP[ i ] = ( unsigned char )wcstol( src, &endptr, iRadix );
if( src == endptr )
return 0;
count -= endptr - src;
src = endptr;
while( 0 != count && iswspace( *src ) ) //skip spaces
++src, --count;
if( i < 3 )
{
if( L'.' == *src ) //skip point
++src, --count;
else
return 0;
}
while( 0 != count && iswspace( *src ) ) //skip spaces
++src, --count;
}
if( i < 4 )
return 0;
if( ptrPort )
{
if( 0 == count || L':' != *src ) //skip point
return 0;
++src, --count;
while( 0 != count && iswspace( *src ) ) //skip spaces
++src, --count;
*ptrPort = ( unsigned short )wcstol( src, &endptr, 10 );
if( src == endptr )
return 0;
else
return 1;
}
else
return 1;
}
Пуресишник зарефакторил
+123
int closeestsockptr( SOCKET* pSocket )
{
char chBuf[ 100 ];
fd_set rdevents, exevents;
struct timeval tv;
int iRetVal = 1;
int optlen;
SOCKET s = INVALID_SOCKET;
BOOL bLinger;
LINGER lng;
if( NULL == pSocket || INVALID_SOCKET == *pSocket )
return SOCKET_ERROR;
s = *pSocket;
optlen = sizeof( bLinger );
iRetVal = getsockopt( s, SOL_SOCKET, SO_DONTLINGER, ( char* )&bLinger, &optlen );
if( 0 == iRetVal && TRUE == bLinger ) //linger is off
{
lng.l_onoff = 1; //set linger on
lng.l_linger = 1; //set linger timeout to 1 second
iRetVal = setsockopt( s, SOL_SOCKET, SO_LINGER, ( char* )&lng, sizeof( lng ) );
if( 0 == iRetVal )
{
if( 0 == shutdown( s, SD_SEND ) )
{
tv.tv_sec = 3; //seconds
tv.tv_usec = 0; //microseconds
while( 1 )
{
FD_ZERO( &rdevents );
FD_ZERO( &exevents );
addsock2fd( &rdevents, NULL, &exevents, s ); //FD_SET( s, &rdevents ), FD_SET( s, &exevents );
iRetVal = select( 1, &rdevents, NULL, &exevents, &tv );
if( SOCKET_ERROR != iRetVal && 0 != iRetVal && FD_ISSET ( s, &rdevents ) && !FD_ISSET ( s, &exevents ) )
{
iRetVal = recv( s, chBuf, sizeof( chBuf ) / sizeof( *chBuf ), 0 );
if( iRetVal > 0 ) //Some data received
continue;
if( 0 == iRetVal ) //Receive FD_CLOSE
break;
else //SOCKET_ERROR returned
break;
}
else if( 0 == iRetVal ) //exceeded the timeout
{
WSASetLastError( WSAETIMEDOUT );
break;
}
else //SOCKET_ERROR returned
break;
}
}
}
}
if( NULL == pSocket || INVALID_SOCKET == *pSocket )
return SOCKET_ERROR;
iRetVal = closesocket( *pSocket );
*pSocket = INVALID_SOCKET;
return iRetVal;
}
Пуресишник наваял
+142
main()
{
j=atol("776677"); c=0;
gb=65500; /*гран буф не>65500!*/
gp=gb+65500;
c=PA();
vm = v_mod(0x0f00)&0x00ff;
if((vm!=2) && (vm!=3) && (vm!=7)) v_mod(3);
if(vm==7) v_m=MK_FP(0xB000,0); /* присвоить адр в-памяти */
else v_m=MK_FP(0xB800,0);
if(c==0) {printf("Самопроверка программы неудачна."); dely(9);}
gek=calloc(1000,sizeof(int));
bufa=farcalloc(4000,sizeof(long));
bfk=calloc(4000,sizeof(int));
ok=calloc(800,sizeof(char));
st=calloc(10,sizeof(char));
bufv=calloc(4000,sizeof(char));
if((gek==NULL)||(bufa==NULL)||(bfk==NULL)||(ok==NULL)||(st==NULL)||(bufv==NULL))
{
printf(" Неудачное выделение памяти для основных буферов.\n");
printf(" Программа не выполняется.");
dely(9); exit(1); }
for(x=0;x<4000;x++) {bufa[x]=0L;bfk[x]=0; /*занул буф адресов и кодов */
if(x<10) st[x]=0x00; /*буф для выв чисел на экр*/
if(x<26) urov[x]=1;
if(x<20) {abn[x]=1; aba[x]=2L;}} /*мин адресa абс ном строк и нач загр буф*/
if(x<128) B0[x]=0;
ur=vv=avt=in=0; i=N=0; zap=0;x_=1;
ifm=10;/*10,01,11,12,21 - 1:п/панель записей,0-инф п/панель,12,21-2 базы*/
/* vctp(3);*/
mou(0); kur(0);
okn=0; /*сбр инд сохр-х окон*/
v_mod(0);
nok1=16;
SET(); ch=pal[0];
textbackground(BLACK);
clrscr();
okno(0,2,ch,ch);
window(1,1,80,25);
okno(16,2,ch,ch);
nstr(1);
baz=1;
nfl="0.cry ";
F_place("10.cry");
kzo();
prx=3; /*нейтраль*/
for(vm=4000;vm<8000;vm++) v_m[vm]=0; vm=0;
/*vm-далее кол-во стр загр буф*/
ppan(0,0);
form_kod(2);/*чт genko*/
attr=pal[5]; vdl(a+1,y_,a+36,y_,0,0); /*сох атр бывш стр*/
vctp(0);
tit();
if(zap!=0) nstr(2);
ZA[0]='\0';
za=strlen(MPR);
strcat(ZA,MPR);if(za>3) strcat(ZA,"\\"); strcat(ZA,"save.com");
za=0; if((access(ZA,0)!=-1)) za=1; /*ZA-путь savera*/
/**************/
for(;;)
{
mou(1);
ch=get_char(1);
if((ch<48)||(ch>57)) /*кроме цифр*/
if((ch!=0xfe)&&(ch>0x20)&&(f_kl==0)) {printf("\7"); ch=0;}
mou(2); mus(a); /*ориен мыши*/
if((ch==TAB)||(ch==RIGHT)||(ch==LEFT))
tab();/*порядок не менять*/
if(ch==15) { ctrl(); tab();}
mus(a); mus(101);
if(ch==F7) gl_poisk(0);
if(ch==AF7) gl_poisk(1);
if(ch==F1) hlp();
if(ch==CTRL) ctrl();
if((ch==AF1)&&(Pp==1)) ctrl();
if((ch==AF2)&&(Pp==0)) ctrl();
if(ch==32) exr(0);
if(ch==AF3) exb();
if(ch==AF4) exr(1);
if(ch==UP) { cm=0; up(1);}
if(ch==DOWN) { cm=0; down(1); }
if(ch==PGUP) { cm=0;scroll(0,0);}
if(ch==PGDN) { cm=0;scroll(1,0);}
if(ch==HOME) { cm=0;scroll(0,4000);}
if(ch==END) { cm=0;scroll(1,4000);}
if(ch==F5) kon(1);
if(zap==0) /*ес зп разреш*/
{
if(ch==INS) { s=0;
if((chkm(3)!=0)||(chkm(4)!=0)) {s=1;
coo(0,0x4E,0xCF,"","Предельная длина файла!",
"Разрешено только удаление!",""," Выход");}
if((chkm(1)!=0)||(chkm(2)!=0)) {s=1;
coo(0,0x4E,0xCF,"","Исчерпана длина буфера!",
"Сохраните набранную информацию,","после чего можно продолжить.",
" Выход");}
if(vm==4000)
{coo(0,0x7f,0x70,"Количество записей в списке достигло 4000.",
"","В данном случае возможно только удаление",
Это один знакомый слесарь ЭВМ писал прогу для создания/редактирования/просмотра самопальной древовидной БД, для своих нужд, с тем условием, что работать она должна была чуть ли не на i286, и грузилась не более 2х секунд. Недавно он обратился ко мне с просьбой перенести её под линь, но увидев это я решил что такое жить не должно, поэтому просто писал аналог с нуля, на плюсах, но справедливости ради, замечу что моя прога вышла чуть тормознее:).
Полный код к сожалению не влез, вот он: http://ideone.com/3sLsa.
P.S. Авторское форматирование сохранено.
+103
if ( (mver!=0) != (qver!=0) )
для головоломки слабовато, но глаза все равно напрягает.
+132
enum
{
MaxStringLen = 1024
};
Офигенный метод объявления констант!