Mercurial > pidgin
comparison src/protocols/oscar/icq.c @ 5345:bfe98c4d331e
[gaim-migrate @ 5721]
ICQ has a maximum password length of 8 characters, apparently. I made
Gaim truncate that shizzle for ICQ.
This fixes this:
http://sourceforge.net/tracker/?func=detail&aid=732409&group_id=235&atid=100235
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sat, 10 May 2003 15:33:48 +0000 |
parents | 46fb754a3c10 |
children | 6d3d8f11e765 |
comparison
equal
deleted
inserted
replaced
5344:fda2d94b9434 | 5345:bfe98c4d331e |
---|---|
103 aim_tx_enqueue(sess, fr); | 103 aim_tx_enqueue(sess, fr); |
104 | 104 |
105 return 0; | 105 return 0; |
106 } | 106 } |
107 | 107 |
108 /** | |
109 * Change your ICQ password. | |
110 * | |
111 * @param sess The oscar session | |
112 * @param passwd The new password. If this is longer than 8 characters it | |
113 * will be truncated. | |
114 * @return Return 0 if no errors, otherwise return the error number. | |
115 */ | |
108 faim_export int aim_icq_changepasswd(aim_session_t *sess, const char *passwd) | 116 faim_export int aim_icq_changepasswd(aim_session_t *sess, const char *passwd) |
109 { | 117 { |
110 aim_conn_t *conn; | 118 aim_conn_t *conn; |
111 aim_frame_t *fr; | 119 aim_frame_t *fr; |
112 aim_snacid_t snacid; | 120 aim_snacid_t snacid; |
113 int bslen; | 121 int bslen, passwdlen; |
114 | 122 |
115 if (!passwd) | 123 if (!passwd) |
116 return -EINVAL; | 124 return -EINVAL; |
117 | 125 |
118 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) | 126 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) |
119 return -EINVAL; | 127 return -EINVAL; |
120 | 128 |
121 bslen = 2+4+2+2+2+2+strlen(passwd)+1; | 129 passwdlen = strlen(passwd); |
130 if (passwdlen > MAXICQPASSLEN) | |
131 passwdlen = MAXICQPASSLEN; | |
132 bslen = 2+4+2+2+2+2+passwdlen+1; | |
122 | 133 |
123 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) | 134 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) |
124 return -ENOMEM; | 135 return -ENOMEM; |
125 | 136 |
126 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); | 137 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); |
133 aimbs_putle16(&fr->data, bslen - 2); | 144 aimbs_putle16(&fr->data, bslen - 2); |
134 aimbs_putle32(&fr->data, atoi(sess->sn)); | 145 aimbs_putle32(&fr->data, atoi(sess->sn)); |
135 aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */ | 146 aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */ |
136 aimbs_putle16(&fr->data, snacid); /* eh. */ | 147 aimbs_putle16(&fr->data, snacid); /* eh. */ |
137 aimbs_putle16(&fr->data, 0x042e); /* shrug. */ | 148 aimbs_putle16(&fr->data, 0x042e); /* shrug. */ |
138 aimbs_putle16(&fr->data, strlen(passwd)+1); | 149 aimbs_putle16(&fr->data, passwdlen+1); |
139 aimbs_putraw(&fr->data, passwd, strlen(passwd)); | 150 aimbs_putraw(&fr->data, passwd, passwdlen); |
140 aimbs_putle8(&fr->data, '\0'); | 151 aimbs_putle8(&fr->data, '\0'); |
141 | 152 |
142 aim_tx_enqueue(sess, fr); | 153 aim_tx_enqueue(sess, fr); |
143 | 154 |
144 return 0; | 155 return 0; |