- readit(client->net, buf, len);
- DEBUG("buf->exp, ");
- if ((client->server->flags & F_READONLY) ||
- (client->server->flags & F_AUTOREADONLY)) {
- DEBUG("[WRITE to READONLY!]");
- ERROR(client, reply, EPERM);
- continue;
- }
- if (expwrite(request.from, buf, len, client)) {
- DEBUG("Write failed: %m" );
- ERROR(client, reply, errno);
- continue;
+ while(len > 0) {
+ readit(client->net, buf, currlen);
+ DEBUG("buf->exp, ");
+ if ((client->server->flags & F_READONLY) ||
+ (client->server->flags & F_AUTOREADONLY)) {
+ DEBUG("[WRITE to READONLY!]");
+ ERROR(client, reply, EPERM);
+ continue;
+ }
+ if (expwrite(request.from, buf, len, client)) {
+ DEBUG("Write failed: %m" );
+ ERROR(client, reply, errno);
+ continue;
+ }
+ SEND(client->net, reply);
+ DEBUG("OK!\n");
+ len -= currlen;
+ currlen = (len < BUFSIZE) ? len : BUFSIZE;