pppd 源码修改1
?1. pppd撥號成功后,會將解析到的dns服務器IP地址,寫入/etc/ppp/resolv.conf
? ? 這樣的話,gethostbyname_r并不會識別,并且,如果有啟動兩路pppd的話,后面一路會將resolv.conf文件重寫。
? ? 因此,這塊代碼需要修改。
? ? 在pppd/ipcp.c文件中,修改create_resolv函數即可
static void
create_resolv(peerdns1, peerdns2)u_int32_t peerdns1, peerdns2;
{FILE *f;int find1 = 0, find2 = 0;char buf[1024];bzero(buf, sizeof(buf));f = fopen(_PATH_LINUX_RESOLV, "a+");if (f == NULL){error("Failed to create %s: %m", _PATH_LINUX_RESOLV);return;}while((fgets(buf,1024,f))!=NULL){int n = strlen(buf);buf[n - 1] = 0;if(!strcmp(buf+11, ip_ntoa(peerdns1))){find1 = 1;}if(!strcmp(buf+11, ip_ntoa(peerdns2))){find2 = 1;}bzero(buf, sizeof(buf));}if(find1 == 0)fprintf(f, "nameserver %s\n", ip_ntoa(peerdns1));if(find2 == 0)fprintf(f, "nameserver %s\n", ip_ntoa(peerdns2));if (ferror(f))error("Write failed to %s: %m", _PATH_LINUX_RESOLV);fclose(f);
}
_PATH_LINUX_RESOLV這個路徑為/etc/resolv.conf
這樣修改后,pppd撥號成功后,會先搜索resolv.conf文件,如果要寫入的dns已經存在,那么就不寫,如果不存在,
則,追加進去,并不重寫文件。
2. 如果兩路同時撥通后,需要知道ppp0,ppp1與串口設備文件的對應關系,可以修改源碼生成這個對應關系文件。
static void
create_relation(peerdns1, peerdns2)u_int32_t peerdns1, peerdns2;
{FILE *f;int find = 0;char buf[1024];bzero(buf, sizeof(buf));f = fopen(_PATH_PPPD_RELATION, "r");if(f != NULL){while((fgets(buf,1024,f))!=NULL){//例子: ppp0 /dev/ttySAC3 183.230.126.225 183.230.126.224//判斷如果文件中另一個ppp存在的話,并且它的串口名稱和這次連接的串口名稱不一樣的話,//就保存下來if(memcmp(buf, ifname, 4) && memcmp(buf + 5, devnam, 12)){find = 1;break;}}fclose(f);}f = fopen(_PATH_PPPD_RELATION, "w");if (f == NULL){error("Failed to create %s: %m", _PATH_PPPD_RELATION);return;}if(find == 1)fprintf(f, buf);char dns1[64];char dns2[64];bzero(dns1, sizeof(dns1));bzero(dns2, sizeof(dns2));strcpy(dns1, ip_ntoa(peerdns1));strcpy(dns2, ip_ntoa(peerdns2));fprintf(f, "%s %s %s %s\n", ifname, devnam, dns1, dns2);if (ferror(f))error("Write failed to %s: %m", _PATH_PPPD_RELATION);fclose(f);
}
_PATH_PPPD_RELATION之個路徑隨意,將create_relation這個函數加到create_resolv這個函數的調用后面即可
生成的文件效果如上圖所示
總結
以上是生活随笔為你收集整理的pppd 源码修改1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8千多LV拖鞋穿一个星期掉色:官方回应
- 下一篇: 错误./hello: error whi